목록을 최대 힙으로 힙화

모르는 경우 - 힙은 배워야 할 멋진 데이터 구조 중 하나입니다. 왜요?
  • 힙은 O(1)에서 최소값/최대값을 찾을 수 있습니다.
  • O(logn)에서 삽입/삭제를 수행할 수 있는 반면 배열에서는 삽입이 수행됩니다O(n).
  • 이 데이터 구조를 배우면 힙 정렬, 우선 순위 큐 및 배열 힙화 개념을 파악할 수 있습니다.

  • 힙에 대해 자세히 알아보려면 시작하는 데 도움이 되는 몇 가지 리소스가 있습니다.
  • Wikipedia


  • 배열을 힙으로 변환하는 방법입니다.

    list = [20, 5, 30, 10, 15, 45]
    
    def getChildren(pIndex, list):
        leftIndex = pIndex * 2 + 1
        rightIndex = pIndex * 2 + 2
    
        left = -1
        if leftIndex < len(list):
            left = list[leftIndex]
    
        right = -1
        if rightIndex < len(list):
            right = list[rightIndex]
    
        return left, right
    
    def heapify(list):
    
        for i in range(len(list)-1, -1, -1):
            p = list[i]
            left, right = getChildren(i, list)
    
            bigChild = max(left, right)
    
            bigChildIndex = 2 * i + 1
            if right == max(left, right):
                bigChildIndex = 2 * i + 2
    
            j = i
            while p < bigChild and bigChildIndex < len(list) and j < len(list):
                list[j] = bigChild
                list[bigChildIndex] = p
    
                j = bigChildIndex
                left, right = getChildren(j, list)
                bigChild = max(left, right)
                bigChildIndex = 2 * j + 1
    
        return list
    
    print(heapify(list))
    


    Photo by Pixabay

    좋은 웹페이지 즐겨찾기