Middle
რა არის სტეკი (მონაცემთა სტრუქტურების კონტექსტში)?
sobes.tech AI
პასუხი AI-სგან
Heap — ეს სპეციალიზებული ხეია, რომელიც გამოიყენება მონაცემთა სტრუქტურად. ჰიპის ძირითადი თვისება — ნაწილობრივი წესრიგი: ნებისმიერი კვანძისთვის შესრულებულია პირობა, რომ მშობლის მნიშვნელობა მეტია ან ტოლია მისი შვილების მნიშვნელობებზე (max-heap) ან ნაკლები ან ტოლია (min-heap).
ძირითადი მახასიათებლები:
- ბინარული ხე: ყველაზე ხშირად რეალიზებულია ბინარული ხის სახით, სადაც თითოეულ კვანძს მაქსიმუმ ორი შვილი აქვს.
- სრული ბინარული ხე: ყველა დონეზე, გარდა შესაძლოა ბოლო, ხე სრულად არის სავსე. ბოლო დონეზე კვანძები იწერება მარცხნიდან მარჯვნივ. ეს საშუალებას აძლევს ეფექტურად შეინახოთ ჰიპი მასივის სახით.
- ჰიპის თვისება:
- Max-heap: თითოეული კვანძის მნიშვნელობა მეტია ან ტოლია მისი შვილების მნიშვნელობებზე. ყველაზე დიდი ელემენტი ყოველთვის მდებარეობს ძირის წერტილში.
- Min-heap: თითოეული კვანძის მნიშვნელობა ნაკლებია ან ტოლია მისი შვილების მნიშვნელობებზე. ყველაზე პატარა ელემენტი ყოველთვის მდებარეობს ძირის წერტილში.
ჰიპის ოპერაციები:
- ელემენტის დამატება: ახალი ელემენტის დამატება და ჰიპის თვისების შენარჩუნება.
- ელემენტის წაშლა: ძირის ელემენტის (ყველაზე დიდი ან ყველაზე პატარა — ჰიპის ტიპზე დამოკიდებული) წაშლა და ჰიპის თვისების შენარჩუნება.
- ჰიპის შექმნა: მასივიდან ჰიპის აგება.
ჰიპის გამოყენება:
- სორტირება: Heapsort ალგორითმი.
- პრიორიტეტული რიგები: ეფექტური რეალიზაცია, სადაც ელემენტები მუშავდება პრიორიტეტით.
- ძებნის ალგორითმები: მაგალითად, k-მე ყველაზე დიდი ელემენტის ძიება.
- გრაფის ალგორითმები: მაგალითად, Dijkstra-ს ალგორითმი.
ჰიპის წარმოდგენა მასივით:
მიუხედავად იმისა, რომ ჰიპი არის სრული ბინარული ხე, ის ეფექტურად შეიძლება შენახულ იქნას მასივში ინდექსების გარეშე.
- თუ კვანძი მდებარეობს ინდექსზე
i, მისი მარცხენა შვილი მდებარეობს ინდექსზე2*i + 1. - მისი მარჯვენა შვილი მდებარეობს ინდექსზე
2*i + 2. - მისი მშობელი მდებარეობს ინდექსზე
(i - 1) / 2.
# მინ-ჰიპის მასივის მაგალითი
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