[TIL]アルゴリズム&データ構造:スタックとキュー、優先キュー
1.スタックとキュー
1-1. スタックデータ構造
先入後出フォーマット
入口と出口の形状は同じで、箱を積み重ねて可視化できます
DFSなどの複数のアルゴリズムに使用されるデータ構造
時間的複雑度は常にO(1)である.
Pythonはリスト形式を受け入れる
stack = []
# 삽입(5) > 삽입(2) > 삽입(3) > 삽입(7) > 삭제() > 삽입(1) > 삽입(4) > 삭제()
stack.append(5)
stack.append(2)
stack.append(3)
stack.append(7)
stack.pop()
stack.append(1)
stack.append(4)
stack.pop()
print(stack[::-1]) # 최상단 원소부터 출력
print(stack) # 최하단 원소부터 출력
1-2. キューデータ構造(a.k.a.フェアデータ構造)
先進的なデータの先出しフォーマット(先入先出)
入口と出口に穴が開いているトンネルのように、ココはキューとして扱われています
deque
ライブラリを使用すると、Pythonでキューを実装する場合、リストフォーマットの時間的複雑さがより高いためデータ挿入は
append()
を用い,データ削除はpopleft()
を用いるため,この方法の時間的複雑度はO(n)であるが,通常はfrom collections import deque
# 큐(Queue) 구현을 위해 deque 라이브러리 사용
queue = deque()
# 삽입(5) > 삽입(2) > 삽입(3) > 삽입(7) > 삭제() > 삽입(1) > 삽입(4) > 삭제()
queue.append(5)
queue.append(2)
queue.append(3)
queue.append(7)
queue.popleft()
queue.append(1)
queue.append(4)
queue.popleft()
print(queue) # 먼저 들어온 순서대로 출력
queue.reverse() # 역순으로 바꾸기
print(queue) # 나중에 들어온 원소부터 출력
2.優先キュー
データ構造
実施方法
時間の複雑さ
優先キュー実装挿入時間削除時間リストO(1)O(N)Hip(Heap)O(log N)O(log N)
お尻にN個のデータを入れ、すべて取り出す=お尻揃え
時間複雑度:O(N log N)
👉 そのため、お尻の時間の複雑さはリストよりも低い!
お尻の特徴
完全バイナリツリーデータ構造
ルートノードe左側サブノードe右側サブノード順にデータを挿入するツリー
ルートノードを常に削除(ルートノード)
複数の最短パスアルゴリズムを含み、複数のアルゴリズムに使用できます.
最小ヒープ(minheap)
さいだいヒープ
最小臀部構成関数:Min-Hapify()
Heapify()
,合計📌 実装例
import sys
import heapq # 파이썬의 힙 라이브러리
input = sys.stdin.readLine
def heapsort(iterable):
h = []
result = []
# 모든 원소를 차례대로 힙에 삽입 (-1을 인자에 넣으면 max heap 가능)
for value in iterable:
heapq.heappush(h, value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기 (-1을 인자에 넣으면 max heap 가능)
for i in range(len(h)):
result.append(heapq.heappop(h))
return result
n = int(input())
arr = []
for i in range(n):
arr.append(int(input()))
res = heapsort(arr)
for i in range(n):
print(res[i])
Reference
この問題について([TIL]アルゴリズム&データ構造:スタックとキュー、優先キュー), 我々は、より多くの情報をここで見つけました https://velog.io/@minami/알고리즘자료구조-스택과-큐テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol