Python のデータ構造とアルゴリズム - 順序付きリストの維持と二分

Python のデータ構造とアルゴリズム - 順序付きリストの維持と二分

[[402075]]

序文

Bisect は、リストをソートしたままリストに要素を挿入するアルゴリズムを実装します。

この記事では、bisectライブラリを使用してリストを効率的に操作する方法を詳しく紹介します。

注文された挿入物

まず、bisect ライブラリがリスト挿入をどのように実装するかを見てみましょう。具体的なコードは次のとおりです。

  1. インポート二分
  2.  
  3. a = [7, 5, 4, 1, 9, 8, 2, 3, 6, 0, 5]
  4. 印刷(a)
  5. 新しい_a = []
  6. ai場合:
  7. 位置 = bisect.bisect(new_a, i)
  8. bisect.insort(new_a, i)
  9. print(位置、new_a)

実行後の効果は次のようになります。

ご覧のとおり、bisect は挿入用に自動的にソートされ、position は挿入のインデックス位置になります。もちろん、このような挿入の場合は、リストを直接構築してから並べ替える方が速い場合があります。ただし、これは短いリストの場合にのみ非常に高速です。非常に長いリストの場合、上記の挿入ソートを使用すると、特に 2 つのリスト メンバーを比較すると計算オーバーヘッドが大きくなる場合に、時間とメモリを大幅に節約できます。

重複値の処理

実際のリスト処理では、重複した値を処理する場合があります。上記のように、デフォルトでは重複値の右側に余分な 5 が挿入されます。これは、insort_right() 関数を使用するのと同じです。同様に、左側では insort_left() 関数を使用できます。

  1. インポート二分
  2.  
  3. a = [7, 5, 4, 1, 9, 8, 2, 3, 6, 0, 5]
  4. 印刷(a)
  5. 新しい_a = []
  6. ai場合:
  7. 位置 = bisect.bisect_left(new_a, i)
  8. bisect.insort_left(new_a, i)
  9. print(位置、new_a)

実行後の効果は次のようになります。

読者は上の 2 つの画像を比較すると、最後の行のインデックスが変わることがわかります。ご覧のとおり、1 つは 6 で、もう 1 つは 5 です。積極的に変更したため、重複した値はデフォルトで左側に挿入されます。

<<:  アメリカ人教授がAI会議での不正行為を暴露:著者は査読者と共謀し、ゴミ論文も査読を通過

>>:  データ分析技術:エッジ人工知能の応用

ブログ    
ブログ    
ブログ    

推薦する

...

...

5分で初めてのPythonチャットボットを構築

序文人工知能の時代において、チャットボットはますます人気が高まっています。これは、人間とコンピュータ...

...

...

...

[文字列処理アルゴリズム] 最長共通部分文字列を取得するためのアルゴリズム設計とCコード実装

1. 要件の説明2 つの文字列を入力し、2 つの文字列の最長共通部分文字列を取得するプログラムを作成...

...

ChatGPT で質問するときによくある誤解 10 選

諺にもあるように、良い質問は良い答えにつながります。特に GPT を使用するユーザーにとって、質問の...

畳み込みニューラルネットワークの「修理工」のための「マニュアル」

[[242145]]ビッグデータダイジェスト制作編集者: Luo Ran、Xue Qing、Ail...

Facebookは、数億のノードでタスクを迅速に完了できる大規模なグラフ埋め込みアルゴリズムをオープンソース化しました。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

ナレッジグラフは複雑ではありません。整理するお手伝いをさせてください。

[51CTO.com からのオリジナル記事] インターネットビジネスの発展に伴い、大量のデータが生...

...