ヒップホップ


優先キューに作成されたデータ構造、heap.
優先キュー
  • データ優先、優先度の高いデータ先出
  • Heap
  • 完全バイナリツリーの一種で、優先順位キューのための資料構造
  • 最安値または最高値を素早く見つけるために作られた資料構造
  • ヒップホップは逆ソート状態のまま
  • ヒップホップ許容繰返し値
  • 種類
  • 最大お尻
  • 親ノードのキー値が子ノードのキー値以上のバイナリツリー
  • 鍵(親)≧鍵(子)
  • 最小お尻
  • 親ノードのキー値が子ノードのキー値以下のバイナリツリー
  • 鍵(親)≦鍵(子)
  • 通常アレイ実施
  • 実施を容易にするため、最初のインデックス0を使用しない
  • 特定位置のノード番号は、新規ノードを追加した場合はそのまま
  • ヒップホップの親ノードと子ノードの関係
  • 左利きインデックス=(親)*2
  • 右の子のインデックス=(親)*2+1
  • 親のインデックス=(親)/2
  • ヒップ

    from heapq import heappush, heappop
    
    '''
    파이썬에서 heap은 heapq 모듈에 있는 heappush와 heappop을 사용.
    기본적으로 min heap(최소 힙)으로 구현 되어 있기 때문에,
    max heap으로 사용하려면 아래와 같이 push 할 값에 -1을 곱해 줌.
    '''
    
    min_hq = []
    heappush(min_hq,val)
    heappop(min_hq)
    
    max_hq = []
    heappush(max_hq,(-val,val))
    heappop(max_hq)