logo

Python のヒープ キュー (または heapq)

パイソン 。

単純なヒープの作成

heapify(反復可能) :- この関数は次の目的で使用されます。 イテラブルをヒープに変換する データ構造。つまり、ヒープ順に。



Python3






# importing 'heapq' to implement heap queue> import> heapq> # initializing list> li>=> [>5>,>7>,>9>,>1>,>3>]> # using heapify to convert list into heap> heapq.heapify(li)> # printing created heap> print> (>'The created heap is : '>,(>list>(li)))>



>

>

出力

The created heap is : [1, 3, 9, 7, 5]>

アイテムの追加とポップを効率的に行う

    heappush(heap, ele) : この関数は、引数で指定された要素をヒープに挿入するために使用されます。の ヒープ構造が維持されるように順序が調整されます。 heappop(heap) : この関数は、ヒープから最小の要素を削除して返すために使用されます。ヒープ構造が維持されるように順序が調整されます。

Python3




# importing 'heapq' to implement heap queue> import> heapq> # initializing list> li>=> [>5>,>7>,>9>,>1>,>3>]> # using heapify to convert list into heap> heapq.heapify(li)> # printing created heap> print>(>'The created heap is : '>, end>=>'')> print>(>list>(li))> # using heappush() to push elements into heap> # pushes 4> heapq.heappush(li,>4>)> # printing modified heap> print>(>'The modified heap after push is : '>, end>=>'')> print>(>list>(li))> # using heappop() to pop smallest element> print>(>'The popped and smallest element is : '>, end>=>'')> print>(heapq.heappop(li))>

>

>

出力

The created heap is : [1, 3, 9, 7, 5] The modified heap after push is : [1, 3, 4, 7, 5, 9] The popped and smallest element is : 1>

アペンディングとポップ 同時に

    heappushpop(heap, ele) :- この関数は、プッシュ操作とポップ操作の両方の機能を 1 つのステートメントに結合し、効率を高めます。この操作の後、ヒープの順序は維持されます。 heapreplace(heap, ele) :- この関数も 1 つのステートメント内で要素の挿入とポップを行いますが、上記の関数とは異なります。この場合、最初に要素がポップされ、次に要素がプッシュされます。つまり、プッシュされた値よりも大きな値を返すことができます。 heapreplace() は、 heappushpop() とは対照的に、プッシュされた要素に関係なく、元々ヒープ内にあった最小値を返します。

Python3




# importing 'heapq' to implement heap queue> import> heapq> # initializing list 1> li1>=> [>5>,>1>,>9>,>4>,>3>]> # initializing list 2> li2>=> [>5>,>7>,>9>,>4>,>3>]> # using heapify() to convert list into heap> heapq.heapify(li1)> heapq.heapify(li2)> # using heappushpop() to push and pop items simultaneously> # pops 2> print>(>'The popped item using heappushpop() is : '>, end>=>'')> print>(heapq.heappushpop(li1,>2>))> # using heapreplace() to push and pop items simultaneously> # pops 3> print>(>'The popped item using heapreplace() is : '>, end>=>'')> print>(heapq.heapreplace(li2,>2>))>

>

>

出力

The popped item using heappushpop() is : 1 The popped item using heapreplace() is : 3>

Python でヒープから最大要素と最小要素を見つける

    nlargest(k, iterable, key = fun) : この関数は、指定された反復可能オブジェクトから k 個の最大の要素を返し、指定されている場合はキーを満たすために使用されます。 nsmallest(k, iterable, key = fun) : この関数は、指定された反復可能オブジェクトから k 個の最小要素を返し、指定されている場合はキーを満たすために使用されます。

Python3




# Python code to demonstrate working of> # nlargest() and nsmallest()> # importing 'heapq' to implement heap queue> import> heapq> # initializing list> li1>=> [>6>,>7>,>9>,>4>,>3>,>5>,>8>,>10>,>1>]> # using heapify() to convert list into heap> heapq.heapify(li1)> # using nlargest to print 3 largest numbers> # prints 10, 9 and 8> print>(>'The 3 largest numbers in list are : '>, end>=>'')> print>(heapq.nlargest(>3>, li1))> # using nsmallest to print 3 smallest numbers> # prints 1, 3 and 4> print>(>'The 3 smallest numbers in list are : '>, end>=>'')> print>(heapq.nsmallest(>3>, li1))>

>

>

出力

The 3 largest numbers in list are : [10, 9, 8] The 3 smallest numbers in list are : [1, 3, 4]>

例:

Python3




マックOSとは何ですか
import> heapq> # Initialize a list with some values> values>=> [>5>,>1>,>3>,>7>,>4>,>2>]> # Convert the list into a heap> heapq.heapify(values)> # Print the heap> print>(>'Heap:'>, values)> # Add a new value to the heap> heapq.heappush(values,>6>)> # Print the updated heap> print>(>'Heap after push:'>, values)> # Remove and return the smallest element from the heap> smallest>=> heapq.heappop(values)> # Print the smallest element and the updated heap> print>(>'Smallest element:'>, smallest)> print>(>'Heap after pop:'>, values)> # Get the n smallest elements from the heap> n_smallest>=> heapq.nsmallest(>3>, values)> # Print the n smallest elements> print>(>'Smallest 3 elements:'>, n_smallest)> # Get the n largest elements from the heap> n_largest>=> heapq.nlargest(>2>, values)> # Print the n largest elements> print>(>'Largest 2 elements:'>, n_largest)>

>

>

出力

Heap: [1, 4, 2, 7, 5, 3] Heap after push: [1, 4, 2, 7, 5, 3, 6] Smallest element: 1 Heap after pop: [2, 4, 3, 7, 5, 6] Smallest 3 elements: [2, 3, 4] Largest 2 elements: [7, 6]>

このプログラムは、Python の heapq モジュールを使用してヒープ キューを作成し、リストのヒープへの変換、ヒープへの新しい値の追加、ヒープからの最小の要素の削除、ヒープから n 個の最小要素と最大 n 個の要素の取得などのさまざまな操作を実行します。山。

注記 Python の heapq モジュールは、ヒープ用に別のデータ構造を作成せずに、リストに対してヒープ操作をインプレースで実行する関数を提供します。 heapq モジュールは効率的で使いやすいため、Python で優先キューやその他のデータ構造を実装するための一般的な選択肢となっています。

Python でヒープ キュー (または heapq) を使用する利点:

    効率的 : ヒープ キューは、Python で優先キューとヒープを管理するための非常に効率的なデータ構造です。これは、多くの操作に対して対数的な時間計算量を提供するため、多くのアプリケーションで一般的な選択肢となっています。スペース効率の高い : ヒープ キューは要素を配列ベースの表現で格納するため、スペース効率が高く、リンク リストなどのノードベースのデータ構造に関連するオーバーヘッドを最小限に抑えます。使いやすさ : Python のヒープ キューは使いやすく、シンプルで直感的な API を備えているため、ヒープへの要素の挿入、削除、取得などの基本的な操作を簡単に実行できます。柔軟性 : Python のヒープ キューを使用すると、優先キュー、ヒープ、バイナリ ツリーなどのさまざまなデータ構造を実装できるため、多くのアプリケーションにとって汎用性の高いツールになります。

Python でヒープ キュー (または heapq) を使用する場合の欠点:

    機能の制限 : ヒープ キューは主に優先キューとヒープを管理するために設計されており、より複雑なデータ構造やアルゴリズムには適さない場合があります。ランダム アクセスなし: ヒープ キューは要素へのランダム アクセスをサポートしていないため、ヒープの中央にある要素にアクセスしたり、ヒープの先頭にない要素を変更したりすることが困難になります。並べ替えなし: ヒープ キューは並べ替えをサポートしていないため、要素を特定の順序で並べ替える必要がある場合は、別のデータ構造またはアルゴリズムを使用する必要があります。スレッドセーフではない : ヒープ キューはスレッドセーフではありません。つまり、データ同期が重要なマルチスレッド アプリケーションでの使用には適さない可能性があります。

全体として、ヒープ キューは、Python で優先キューとヒープを管理するための非常に効率的で柔軟なデータ構造ですが、機能が制限されている可能性があり、すべてのアプリケーションに適しているわけではありません。