2017-10-16 8 views
0

ソートされたリストのリストをバイナリ検索する方法ですか?
のは、私はリストのリストを持っていると仮定しましょう:私は内側のリストに3D要素によって、それをソートしてきましたPython - リストのソートされたリストのバイナリ検索

list = [['A', 'B', 3], ['C', 'D', 1], ['E', 'F', 2]] 

list = sorted(list , key=itemgetter(2)) 

と今リストが

[['C', 'D', 1], ['E', 'F', 2], ['A', 'B', 3]] 

そしてあります今、ソートされた内部リストの要素を使用して、バイナリ検索(O(log(n))時間の複雑さ)でソートされたリストをどのように検索できますか?

同様
findBy(list, index_of_inner_list, value_of_inner_list_to_find) 

外リストは巨大です。内側のリストはlen 50です。内側のリストに関連する条件に基づいて外側のリストからいくつかの要素を抽出するために多くのクエリを行う必要があります。私はbisectについて考えていたが、内側の配列はそれが問題になると思う。

+1

これを読んだことがありますか?https://stackoverflow.com/questions/42146482/using-bisect-on-list-of-tuples-but-compare-using-first-value-onlyここにいくつかの提案があります任意のキー機能を持つ二等分実装の場合 – schwobaseggl

+0

[bisect](https://docs.python.org/3.6/library/bisect.html#other-examples)のドキュメントページの最後の例を見てください。それはあなたのために起こっているように見えますか? – glibdud

+0

@glibdudこの例では、OPが明示的に求めているbisectの 'O(log_N)'性能を破棄するキーから新しいリストを構築します。 – schwobaseggl

答えて

0

私は二分法アルゴリズムで十分だと思います。

Pythonのドキュメントは

https://docs.python.org/3/library/bisect.html

このモジュールは、各挿入後にリストをソートすることなく、ソート順 内のリストを維持するためのサポートを提供することを私たちに語りました。高価な比較操作を伴う項目の長いリスト の場合、これはより一般的な方法よりも 改善です。このモジュールはbisect と呼ばれています。なぜなら、基本的な二分法アルゴリズムを使用してその作業を行っているからです。ソース コードは、アルゴリズムの実際の例として最も役立ちます( の境界条件は既に正しいです!)。

+0

これがどのように質問に関連しているかを示すことができますか?具体的には、デフォルトのソート方法以外の方法で要素をソートしますか? – glibdud

関連する問題