В чем разница между размерами A.length и A.heap?

У меня вопрос о сортировке кучи. В книге "Алгоритмы" указано, что A.heap-size<= A.length Я не понимаю разницы между ними. Если массив представляет кучу, то почему существует вероятность того, что A.heap-size меньше A.length. Я знаю, что A.heap-size представляет количество элементов внутри кучи, поэтому почему он не полностью равен числу элементов внутри массива?

Ответ 1

Инвариант сортировки кучи состоит в том, что первые k элементов массива n-элементов представляют собой кучу на k самых маленьких элементах, а последние n-k-элементы - это самые большие элементы n-k в отсортированном порядке. Последние элементы - вот почему куча не занимает весь массив.

Ответ 2

Просто чтобы расширить ответ. Читайте дальше эту книгу.

A.heap_size массива - это место, где будут размещаться элементы структуры кучи (max_heap или min_heap). Это имеет смысл в области сортировки или очередей. Вы правы: это количество элементов внутри кучи, но оно равно A.length только при первой итерации сортировки кучи.

На следующей итерации после обмена корнем из дерева max_heap (A[1]) с A[i] = A[A.length] (последний элемент внутри массива A) элемент A[1] будет последним элементом значения A и A.heap_sort будет уменьшаться на 1, а max_heap-структура должна быть max_heapified: A[Parent(i)] >= A[i], где Parent(i) возвращает i/2 дерева кучи.

Ответ 3

A.length дает полное no элементов массива, тогда как размер A.heap задает no элементов, которые находятся в отсортированном порядке или нет элементов, которые следуют за состоянием кучи........ А A. length-A.heap или даже не отсортированы даже сейчас и должны быть отсортированы в будущем.

Ответ 4

Из учебника Cormen Algorithm, который я использую: (это помогло мне) введите описание изображения здесь