max_heapify итеративный способ спуститься в кучу, чтобы получить узлы следующего уровня

Я пытаюсь написать итеративный цикл управления вместо рекурсии, потому что он более эффективен, может кто-нибудь сказать мне, имеет ли мой код смысл: Рекурсивная версия:

      def max_heapify(array, i):

left = 2 * i
right = 2 * i + 1
length = len(array) - 1  # for termination condition check
largest = i

if left <= length and array[i] < array[left]:
  largest = left
if right <= length and array[largest] < array[right]:
  largest = right
if largest != i:
  array[i], array[largest] = array[largest], array[i]
  max_heapify(array, largest) 

Итерационная версия (думаю, это не так ??)

      def max_heapify(array, i):

  left = 2 * i
  right = 2 * i + 1
  length = len(array) - 1  # for termination condition check
  largest = i

  if left <= length and array[i] < array[left]:
      largest = left
  if right <= length and array[largest] < array[right]:
      largest = right
  if largest != i:
      array[i], array[largest] = array[largest], array[i]
      i= largest

Могу ли я получить предложения о том, что не так с итеративной версией

1 ответ

На самом деле я думаю, что подумал

      def max_heapify(array, i):

left = 2 * i
right = 2 * i + 1
length = len(array) - 1  # for termination condition check
largest = i

if left <= length and array[i] < array[left]:
   largest = left
if right <= length and array[largest] < array[right]:
   largest = right
if largest != i:
   array[i], array[largest] = array[largest], array[i]
   i= largest
else:
 break
Другие вопросы по тегам