インタビューの質問に最初のセットビットの検索:巨大なビットマップ
を万台を保持することができ、駐車スロットでは、無料駐車スロットを見つける必要があります。スロットがどこにあるか、すなわち駐車場が複数の入口を有することができ、入口付近のスロットを見つけることなどは問題ではないという条件はない。問題は、どのような種類のデータ構造を使用すべきか、さまざまな操作の複雑さがどのようなものかということでした。
私は、撮影/空きスロットのために0/1で、百万ビットのビット配列を使用することを提案しました。フリースポットを見つけるために、最初のセットビットを見つけることに翻訳されました。そこに車が何台あるかについては何も想定しないでください。つまり、ビット配列が疎であるか密集している可能性があります。
巨大なビットマップのセットビットを見つける最も速い方法は何ですか?私はバイナリ検索+効率的なffs()をスキームとして単語ごとに提案しました。
ストア変数の最後の空きスロットのインデックス、その後、最初からビットマップをスキャンしません。次の1を探しているが、この値から:
配列の内容について何も想定できない場合、バイナリ検索はここでは役に立ちません。線形検索を使用する必要があります。 –
cでは、(uint64_tを使用して)64ビットグループのスロットを調べ、最初の非ゼロ値を調べることができます。 –
私はフェンウィックツリー(バイナリインデックスツリー、BIT)上でバイナリ検索をします。更新操作にはO(log n)が必要です。最初のセットビットの検索はO((log n)^ 2) – nhahtdh