まず第一に、この質問の性質は、私の知識に従ってすでに投稿されている他の質問とは異なることを明確にしたいと思います。そうでない場合はお知らせください。
与えられた
- 私は名前のリストを持っています〜3000。
- 1行に1つの名前で構成される約2500のファイルがあります(名前リストから取得)
- 各ファイルには最大3000の名前が含まれています(したがって、平均は400ですが、最大3000行です)
問題
ある時点で、2つのファイルが提供されます。両方のファイルに共通する名前のリストを作成する必要があります。
前処理
時間の複雑さを軽減するために、前処理を行い、すべてのファイルの名前を並べ替えました。
私のアプローチ
- 指定されたリストで名前を並べ替え、0から2999までのインデックスを付けました
- 各名前の各ファイル
- グループ番号を計算しました(name_index / 30)
- グループ値を計算しました(同じグループ内の名前ごとに(2 ^(name_index%30))を計算して追加します)
- 「groupNumberblankSpacegroupValue」の形式で同じ名前の新しいファイルを作成します
結果
各ファイルに〜3000(平均は400)の名前を付ける代わりに、各ファイルに最大100行を含めるようになりました。次に、共通のグループ番号を確認する必要があります。次に、ビット操作を使用して、共通の名前を見つけることができます。
期待
誰かが問題のより短くてより良い解決策を提案できますか?前処理を実行して新しいファイルをアプリケーションに保存できるため、一般名を見つけるときに最小限の処理が必要です。
問題を解決するために間違った方向に進んでいる場合はお知らせください。前もって感謝します。
ポイント
私のアプローチでは、合計ファイルのサイズは258KB(グループ名とグループ値を使用したため)であり、各行の名前で保持されている場合、そのサイズは573KBです。これらのファイルはモバイルデバイスに保存する必要があります。そのため、可能な限りサイズを小さくする必要があります。また、データ圧縮を楽しみにしていますが、その方法がわかりません。それも説明してください。