データ構造とアルゴリズム - 検索アルゴリズム - 検索とバイナリ検索リスト

################################################## #######

「」」
まず、のリストを見つけます
リストを表示して下さい1.リストから指定のアイテムを探します
入力:検索する要素のリスト
出力:エレメントのインデックスや検索要素

2、順次検索:彼らは見つけるまで、検索のため、リストの最初の要素で始まります。
インデックスFOUNDを返します。

図3に示すように、二分探索:候補領域リストに[0:n]は、データを注文開始、中間値候補領域の値を比較することにより、候補領域が半分に低減することができ、処理されたルックアップ。
バイナリ検索:時間計算量はO(LOGN)
バイナリ前提を探す:リストが順序付けられています
複合体のセクションを読むための時間が割り当てられるのO(N)#カットであります


「」」

 

##################バイナリ検索#######################

#バイナリ検索、
#Advantageは、高速検索速度の比較的少数である、優れた平均的なパフォーマンス
#欠点は、ルックアップテーブルを注文するための必要条件である、および削除の困難を挿入します
順序付きリストを頻繁に変更することがまれ#と見つけます

中間位置が決定された場合#、式は、2で割った指標であります
#コードロジックは、最良の方法は、再帰的な実装を使用することで、

#最初の方法は、再帰を使用して達成するために
デフbinary_search(連想リスト、アイテム):
    N = LEN(連想リスト)
    半ば= N // 2
    n> 0の場合:
        もし連想リスト[中間] ==アイテム#検索中間体と、即座に、真を返すようなデジタル値であれば
            trueを返します
        ELIFアイテム<連想リスト[中間]:デジタル値を再帰的にサブテーブルの左側には、中央よりも小さい場合に#を見つけるのは、
            リターンbinary_search(連想リスト[:ミッド]、アイテム)
        他:あなたはデジタル値を見つけた場合#は、再帰的に子テーブルの右側に、真ん中よりも大きく、
            (:、項目連想リスト[中間+ 1])binary_search返します
    再帰が終わったならば、我々はコンテンツではないことが判明していない、偽#を返します

非再帰的#第二の方法、
デフbinary_search2(連想リスト、アイテム):
    N = LEN(連想リスト)
    最初= 0
    最後= N-1
    しばらく最初<=最後:#あなたは座標と少ない以上より、終わった、それは時間の要素に相当し、時間を見つけた場合は、
        半ば=(最初+最後)// 2
        連想リスト[中期] ==アイテムの場合:
            trueを返します
        elifの項目<連想リスト[中期]:
            最後=中旬 -  1
        そうしないと:
            最初=ミッド+ 1
    リターン偽

__name__ == '__main__' の場合:

    testlistという= [0、1、2、8、13、17、19、32、42、]
    プリント(binary_search(testlistという、3))
    プリント(binary_search(testlistという、19))
    プリント(binary_search2(testlistという、3))
    プリント(binary_search2(testlistという、19))

 

 

############################################

 

############################################

 

############################################

おすすめ

転載: www.cnblogs.com/andy0816/p/12348275.html