タグ付けされた質問 「binary-search」

20
Pythonでのバイナリ検索(二分)
リスト/タプルでバイナリ検索を実行し、見つかった場合はアイテムの位置を返し、見つからない場合は「False」(-1、なしなど)を返すライブラリ関数はありますか? bisectモジュールで関数bisect_left / rightを見つけましたが、アイテムがリストにない場合でも位置を返します。それは彼らの意図する使用法には完全に問題ありませんが、私はアイテムがリストにあるかどうかを知りたいだけです(何も挿入したくない)。 bisect_leftその位置にあるアイテムが私が検索しているものと等しいかどうかを使用して確認することを考えましたが、それは面倒に思われます(そして、番号がリスト内の最大の番号よりも大きくなる可能性があるかどうかも境界チェックを行う必要があります)。より良い方法がある場合、それについて知りたいのですが。 編集これが何のために必要なのかを明確にするために:辞書がこれに非常に適していることは承知していますが、メモリ消費量をできるだけ低く保つようにしています。私の使用目的は、一種の双方向ルックアップテーブルになります。テーブルに値のリストがあり、それらのインデックスに基づいて値にアクセスできるようにする必要があります。また、特定の値のインデックス、または値がリストにない場合はNoneを見つけられるようにしたいと思います。 これに辞書を使用するのが最も速い方法ですが、メモリ要件が(約)2倍になります。 私は、Pythonライブラリーで何かを見落とした可能性があると考えて、この質問をしていました。萌さんが示唆したように、自分でコードを書かなければならないようです。

14
二分探索の複雑さを計算する方法
誰かが二分探索は探索に必要な入力を半分にするので、それがlog(n)アルゴリズムであると誰かが言うのを聞いた。私は数学の出身ではないので、それを理解することはできません。誰かがもう少し詳しく説明できますか?対数系列で何かしなければならないのですか?

30
最適な方法で二分探索木のk番目に小さい要素を見つける
静的/グローバル変数を使用せずに、バイナリ検索ツリーでk番目に小さい要素を見つける必要があります。それを効率的に達成する方法は?私が心に留めている解決策は、O(n)で操作を実行することです。これは、ツリー全体を順不同に走査することを計画しているため、最悪のケースです。しかし、ここのBSTプロパティは使用していないようです。私の仮定の解決策は正しいですか、それともより良い解決策がありますか?

9
「便利な」C ++バイナリ検索アルゴリズムはどこで入手できますか?
std::binary_search標準ライブラリの<algorithm>ヘッダーのようなC ++ STLコンテナーと互換性のあるバイナリ検索アルゴリズムが必要ですが、要素が存在するかどうかを示す単純なブール値ではなく、結果を指すイテレーターを返す必要があります。 (補足として、binary_searchのAPIを定義したとき、標準委員会は一体何を考えていましたか?) ここでの主な懸念は、バイナリ検索の速度が必要であることです。そのため、以下で説明するように、他のアルゴリズムでデータを見つけることができますが、データがソートされているという事実を利用して、バイナリの利点を得たいと思います。線形検索ではなく検索。 これまでlower_boundとupper_boundデータが欠落している場合失敗します。 //lousy pseudo code vector(1,2,3,4,6,7,8,9,0) //notice no 5 iter = lower_bound_or_upper_bound(start,end,5) iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6 注:コンテナーと互換性がある限り、std名前空間に属さないアルゴリズムを使用しても問題ありません。同様に、言いますboost::binary_search。

17
2つの並べ替えられた配列の和集合でk番目に小さい要素を見つける方法は?
これは宿題です。彼らはそれがO(logN + logM)どこに取られ、配列の長さであるNと言いMます。 レッツは、配列に名前を付けるaとb。もちろん、i> kのすべてa[i]を無視できますb[i]。 まず比較a[k/2]してみましょうb[k/2]。してみましょうb[k/2]> a[k/2]。したがってb[i]、i> k / 2のすべてを破棄することもできます。 これで、答えが見つかるa[i]all b[i]、i <kおよびall 、i <k / 2が得られました。 次のステップは何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.