Middle
Маалыматтардын түзүмүндө стек деген эмне?
sobes.tech AI
AIден жооп
Heap — бул атайын дарак түрү, ал маалымат структурасы катары колдонулат. Heapтин негизги өзгөчөлүгү — жарым-жартылай уюшкандык: ар бир түпкү чекит үчүн шарт аткарылат, ал шарт — ата-эне чекиттин мааниси анын балдарынын маанисинен чоң же барабар (макс-heap) же кичи же барабар (минимум-heap).
Негизги өзгөчөлүктөр:
- Бинардык дарак: Көбүнчө бинардык дарак түрүндө ишке ашырылат, анда ар бир түпкү чекиттин эң көп эки баласы болот.
- Толук бинардык дарак: Бардык деңгээлдерде, акыркы деңгээлден башка, дарак толук толтурулган. Акыркы деңгээлдеги түпкү чекиттер солдон оңго карай толтурулат. Бул heapти массив түрүндө натыйжалуу сактоого мүмкүндүк берет.
- Heapтин өзгөчөлүгү:
- Max-heap: Ар бир түпкү чекиттин мааниси анын балдарынын маанисинен чоң же барабар. Эң чоң элемент дайыма түпкү чекитте жайгашкан.
- Min-heap: Ар бир түпкү чекиттин мааниси анын балдарынын маанисинен кичи же барабар. Эң кичи элемент дайыма түпкү чекитте жайгашкан.
Heapтин негизги операциялары:
- Элементти кошуу: Жаңы элементти кошуу жана heapтин өзгөчөлүгүн сактоо.
- Элементти өчүрүү: Түпкү элементти (эң чоң же эң кичи — heapтин түрүнө жараша) өчүрүү жана heapтин өзгөчөлүгүн сактоо.
- Heapти түзүү: Массивден heap түзүү.
Heapтин колдонулушу:
- Иреттөө: Heapsort алгоритми.
- Приоритеттүү кезектер: Эффективдүү реализациясы, анда элементтер приоритетке ылайык иштетилет.
- Издөө алгоритмдери: Мисалы, k-элементти издөө.
- Графтык алгоритмдер: Мисалы, Дейкстрас алгоритми.
Heapти массив түрүндө көрсөтүү:
Heap — толук бинардык дарак болгондуктан, ал массивде натыйжалуу сакталат, көрсөткүчтөрдү колдонбостон.
- Эгерде түпкү чекит
iиндексинде болсо, анын сол баласы2*i + 1индекси. - Анын оң баласы
2*i + 2индекси. - Анын ата-эне индекси
(i - 1) / 2.
# Min-heapтин массив түрүндөгү мисалы
heap_array = [10, 15, 20, 17, 25, 30]
# Түпкү чекит: heap_array[0] = 10
# Сол баласы: heap_array[2*0 + 1] = heap_array[1] = 15
# Оң баласы: heap_array[2*0 + 2] = heap_array[2] = 20
# Ата-эне индекси 3 (17): heap_array[(3-1)//2] = heap_array[1] = 15