1/3
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai | Chat |
|---|
No analytics yet
Send a link to your students to track their progress
Codeblock 1
Kind zu groß, klettert nach oben
def swim(self, k):
while k > 1 and self.pq[k//2] < self.pq[k]:
self.pq[k], self.pq[k//2] = self.pq[k//2], self.pq[k]
k = k // 2solange ich nicht die Wurzel bin und größer als mein Vater bin
tausche mich mit meinem Vater
und geh auf die Position des Vaters
Codeblock 2
Vater zu klein, sinkt zum größeren Kind
def sink(self, k):
while 2*k <= self.N:
j = 2*k
if j < self.N and self.pq[j] < self.pq[j+1]:
j += 1
if not self.pq[k] < self.pq[j]:
break
self.pq[k], self.pq[j] = self.pq[j], self.pq[k]
k = jsolange ich überhaupt ein linkes Kind habe
zeig erstmal aufs linke Kind
gibt's ein rechtes Kind und ist es größer? dann zeig dorthin
bin ich schon größer als das gewählte Kind? dann fertig
sonst tausche mich mit dem Kind
und geh auf die Position des Kindes
Codeblock 3
hinten anhängen, hochklettern lassen
def insert(self, x):
self.N += 1
self.pq[self.N] = x
self.swim(self.N)Heap wird um eins größer
das Neue kommt ans Ende
und schwimmt von dort hoch
Codeblock 4
auto
def delMax(self):
max_val = self.pq
self.pq, self.pq[self.N] = self.pq[self.N], self.pq
self.N -= 1
self.sink(1)
self.pq[self.N+1] = None
return max_valmerk dir die Wurzel, das ist das Maximum
tausch die Wurzel mit dem letzten Element
Heap wird um eins kleiner
die neue Wurzel sinkt an ihren Platz
Referenz auf das Entfernte löschen (Loitering)
und gib das Gemerkte zurück