################################################## #######
「」」 まず、のリストを見つけます リストを表示して下さい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))
############################################
############################################
############################################