РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
934 of 1593 menu

Функция heap.Fix

Функция heap.Fix восстанавливает свойства кучи после изменения значения элемента. Она принимает два параметра: первый параметр — это интерфейс heap.Interface, представляющий кучу, второй параметр — индекс элемента, значение которого было изменено. Функция переупорядочивает кучу, перемещая измененный элемент вверх или вниз по дереву в зависимости от его нового значения.

Синтаксис

heap.Fix(h, i)

Пример

Создадим минимальную кучу из целых чисел и увеличим значение корневого элемента, а затем восстановим свойства кучи с помощью heap.Fix:

package main import ( "container/heap" "fmt" ) type IntHeap []int func (h IntHeap) Len() int { return len(h) } func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] } func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } func (h *IntHeap) Push(x any) { *h = append(*h, x.(int)) } func (h *IntHeap) Pop() any { old := *h n := len(old) x := old[n-1] *h = old[0 : n-1] return x } func main() { h := &IntHeap{1, 3, 5, 7, 9} heap.Init(h) // Изменяем корневой элемент (*h)[0] = 10 heap.Fix(h, 0) fmt.Println(*h) }

Результат выполнения кода:

[3 7 5 10 9]

После увеличения корневого элемента с 1 до 10 куча была восстановлена, и новый корень стал равен 3.

Пример

Уменьшим значение элемента в середине кучи и восстановим свойства с помощью heap.Fix:

package main import ( "container/heap" "fmt" ) type IntHeap []int func (h IntHeap) Len() int { return len(h) } func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] } func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } func (h *IntHeap) Push(x any) { *h = append(*h, x.(int)) } func (h *IntHeap) Pop() any { old := *h n := len(old) x := old[n-1] *h = old[0 : n-1] return x } func main() { h := &IntHeap{1, 3, 5, 7, 9, 2, 4} heap.Init(h) // Изменяем элемент по индексу 2 (*h)[2] = 0 heap.Fix(h, 2) fmt.Println(*h) }

Результат выполнения кода:

[0 3 1 7 9 2 5]

Уменьшенный элемент был перемещен вверх к корню кучи, сохраняя свойство минимальной кучи.

Смотрите также

  • функцию heap.Init,
    которая инициализирует кучу
  • функцию heap.Push,
    которая добавляет элемент в кучу
  • функцию heap.Pop,
    которая извлекает минимальный элемент из кучи
  • функцию heap.Remove,
    которая удаляет элемент по индексу из кучи
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить