Niestandardowy komparator Python Heapq

Niestandardowy komparator Python Heapq
Algorytmy i koncepcje struktury danych są niezwykle trudne. Wymaga czasu i wysiłku, aby znaleźć najlepsze obiecujące wyjaśnienie problemu. W rezultacie, jeśli utkniesz w implementacji, możesz nie być w stanie zakończyć zadania! W rezultacie wiedza o tym, jak korzystać z każdej z głównych struktur danych i bycie świadomym ograniczeń specyficznych dla Pythona sprawi, że implementacja pójdzie sprawnie. Dwie mało znane struktury danych, które są dość skuteczne, to stosy i kolejki priorytetowe.

Dowiesz się, jak zastosować headq w modułach Python w tym przewodniku. Jakie problemy można wykorzystać do rozwiązywania sterty? Jak przezwyciężyć te problemy z modułem Pythona Heapq.

Jaki jest moduł Python Heapq?

Struktura danych sterty reprezentuje kolejkę priorytetową. Pakiet „Heapq” w Python udostępnia go. Osobliwość tego w Pythonie jest to, że zawsze wyskakuje najmniej z elementów (minę). Element sterty [0] zawsze daje najmniejszy element.

Kilka procedur headq bierze listę jako wejście i organizuje ją w kolejności minimalnej. Wadą tych procedur jest to, że wymagają listy lub nawet zbioru krotek jako parametru. Nie pozwalają ci porównać innych iterabinów lub obiektów.

Rzućmy okiem na niektóre z podstawowych operacji obsługujących moduł Pythona. Aby uzyskać lepsze zrozumienie, jak działa moduł Python Heapq.

Przykład 1:

Moduł Heapq w Python umożliwia wykonywanie operacji sterty na listach. W przeciwieństwie do niektórych dodatkowych modułów, nie określa żadnych niestandardowych klas. Moduł Python Heapq zawiera procedury, które działają bezpośrednio z listami.

Zazwyczaj elementy są dodawane jeden po drugim do sterty, zaczynając od pustej sterty. Jeśli istnieje już lista elementów, które muszą zostać przekonwertowane na stertę, funkcja heapify () w module Python Heapq może być użyta do konwersji listy na prawidłową stertę.

Zobaczmy następujący kod krok po kroku. Moduł Heapq jest importowany w pierwszej linii. Następnie podaliśmy listę nazwiska „jeden.„Wywołano metodę ohatifowania, a lista została podana jako parametr. Wreszcie, wynik jest pokazany.

Import Heapq
jeden = [7, 3, 8, 1, 3, 0, 2]
stert.Rozprowadzaj (jeden)
Drukuj (jeden)

Wyjście wyżej wymienionego kodu pokazano poniżej.

Widać, że pomimo faktu, że 7 występuje po 8, lista nadal podąża za właściwością sterty. Na przykład wartość [2], która wynosi 3, jest mniejsza niż wartość [2*2 + 2], która wynosi 7.

Heapify (), jak widać, aktualizuje listę na miejscu, ale nie sortuje. Sterta nie musi być ułożona, aby wypełnić właściwość sterty. Gdy Heapify () jest używany na posortowanej liście, kolejność elementów na liście jest zachowana, ponieważ każda posortowana lista pasuje do właściwości Heap.

Przykład 2:

Lista elementów lub listę krotek można przekazać jako parametr do funkcji modułu Heapq. W rezultacie istnieją dwie opcje zmiany techniki sortowania. Dla porównania pierwszym krokiem jest przekształcenie iteracyjnej w listę krotek/list. Zrób klasę opakowania, która rozszerza „operator. W tym przykładzie przyjrzymy się pierwszym wspomnianym podejściu. Ta metoda jest prosta w użyciu i może być zastosowana do porównywania słowników.

Dokonaj zrozumienia następującego kodu. Jak widać, zaimportowaliśmy moduł Heapq i wygenerowaliśmy słownik o nazwie Dict_one. Następnie lista jest zdefiniowana dla konwersji krotek. Funkcja HQ.Uprawy (moja lista) organizuje listy w minimalnej grupie i drukuje wynik.

Na koniec konwertujemy listę na słownik i wyświetlamy wyniki.

Importuj Heapq jako HQ
dict_one = 'z': „cynk”, „b”: „Bill”, „w”: „furtka”, „A”: „anna”, „c”: „caouch”
List_one = [(a, b) dla a, b w dict_one.rzeczy()]
Drukuj („Przed zorganizowaniem:”, List_one)
HQ.heapify (List_one)
Drukuj („po zorganizowaniu:”, List_one)
dict_one = dict (list_one)
Drukuj („Ostateczny słownik:”, Dict_one)

Wyjście jest podłączone poniżej. Ostateczny słownik odtwarzany jest wyświetlany obok listy przed i po ułożonej.

Przykład 3:

W tym przykładzie zamierzamy włączyć klasę opakowania. Rozważ scenariusz, w którym obiekty klasy muszą być przechowywane w grupie. Rozważ klasę, która ma atrybuty takie jak „imię”, stopień, „DOB” (data urodzenia) i „Opłata.„Obiekty tej klasy muszą być przechowywane w grupie w zależności od„ DOB ”(data urodzenia).

Obecnie zastępujemy operatora relacyjnego ”, aby porównać opłatę każdego ucznia i zwrócić prawdę lub fałsz.

Poniżej znajduje się kod, przez który możesz przejść krok po kroku. Zaimportowaliśmy moduł Heapq i zdefiniowaliśmy klasę „Student”, w którym napisaliśmy konstruktor i funkcję dostosowanego drukowania. Jak widać, zastąpiliśmy operatora porównawczego.

Utworzyliśmy teraz obiekty dla klasy i określiliśmy listy ucznia. Na podstawie DOB, kod HQ.Ahatify (EMP) przekonwertuje się na min-heap. Wynik jest wyświetlany w ostatnim kawałku kodu.

Importuj Heapq jako HQ
Uczeń klasy:
def __init __ (self, a, b, yos, c):
samego siebie.Nazwa = a
samego siebie.stopień = b
samego siebie.DOB = YOS
samego siebie.Opłata = c
def print_me (self):
Drukuj („Nazwa:”, jaźń.nazwa)
Drukuj („stopień:”, jaźń.stopień)
Drukuj („Data urodzenia:”, str (jaźń.DOB))
Drukuj („pensja:”, str (jaźń.opłata))
def __lt __ (self, nxt):
powrót do siebie.DOB < nxt.DOB
STD1 = Student („Alex”, „Law”, 1990, 36000)
STD2 = Student („Mathew”, „Phd”, 1998, 35000)
STD3 = Student („Tina”, „Informatyka”, 1980, 70000)
STD4 = Student („Jack”, „It”, 1978, 90000)
std = [std1, std2, std3, std4]
HQ.Ahnapify (STD)
Dla i w zakresie (0, len (std)):
std [i].print_me ()
wydrukować()

Oto pełne wyjście wspomnianego powyżej kodu odniesienia.

Wniosek:

Masz teraz lepsze zrozumienie struktur danych sterty i priorytetów i tego, jak mogą one pomóc w rozwiązywaniu różnych problemów. Studiowałeś, jak generować sterty z list Python za pomocą modułu Python Heapq. Badałeś także, jak korzystać z różnych operacji modułu Python Heapq. Aby lepiej zrozumieć ten temat, dokładnie przeczytaj artykuł i zastosuj podane przykłady.