Guten Abend. Vielen Dank für Ihre weitere Unterstützung. m (_ _) m
Fortsetzung der vorherigen Sitzung. Ich habe es reibungslos geschrieben Beilage zum Dump.
test.py
def dump(self):
#Ich bin Tisch[*]Weil es ein Zeiger auf eine Tabelle ist[i]
for i in range(self.capacity):
# table[i]Der Schlüssel gespeichert in,value,Rufen Sie np
p = self.table[i]
# end=""Ist eine Beschreibung, die eine Verbindung zum nächsten Druck herstellt
print(i,end="")
while p is not None:
#Zeigen Sie die folgende Beschreibung unmittelbar nach i oben an
# p.key , p.Wert weiter anzeigen
print(f"=>{p.key}({p.value})",end="")
#Ersetzen Sie p und den nächsten Schlüssel durch np,value,Verbinden Sie sich mit np
p = p.np
#Neue Zeile
print()
Wenn Sie ein Bild haben, das Daten mit einer Perlenkette speichert, die ich das letzte Mal geschrieben habe Ich denke, es ist leicht vorstellbar.
Bisher mit der Hash-Kette, Ich habe die Daten gespeichert. Nachdem wir es gespeichert haben, wollen wir den Ansatz der Suche nach darin enthaltenen Daten in Frage stellen. Grundsätzlich sucht es nach Daten, indem es sie dem Schlüssel in dem bereits gespeicherten Knoten zuordnet.
test.py
def search(self,key):
#Suchen Sie den Zeiger der Tabelle vom Schlüssel.
Vhash = key % self.capacity
p = self.table[Vhash]
while p is not None:
#Wenn der gespeicherte Schlüssel und der Eingabetaste übereinstimmen. ..
if p.key == key:
#Daten mit Druck anzeigen
return print(f"searched value is {p.value}")
p = p.np
#Wenn es nichts gibt, auch wenn Sie bis zum Ende mit while nach den entsprechenden Daten suchen, scheitern Sie
print("faile to search")
Wenn Sie danach suchen, indem Sie es dem vorbereiteten Array hinzufügen, Sie können auch unnötige Elemente löschen, oder? Lassen Sie uns herausfordern. Finden Sie im Grunde wie bei der Suche den entsprechenden Knoten nach Schlüssel. Ändern Sie danach den Verbindungspunkt von Knoten zu Knoten, um den Löschvorgang abzuschließen. Ja, wir werden das np innerhalb des Knotens bearbeiten.
test.py
def remove(self,key):
Vhash = key % self.capacity
p = self.table[Vhash]
pp = None #Anfangswert Keine
while p is not None:
if p.key == key
#Beschreibung beim Löschen der ersten Daten
if pp is None:
self.table[Vhash] = self.table[Vhash].np
#Bearbeiten Sie andere Verbindungspunkte als das erste Element
else:
#pp wird später beschrieben, aber das Bild ist Node, bevor der Schlüssel entspricht.
#p ist der Knoten, dem der Schlüssel entspricht.
# pp.Durch Ersetzen von np des Knotens, dessen Schlüssel np entspricht
#Löschen Sie den entsprechenden Schlüsselknoten aus der Datenverbindung
pp.np = p.np
#Wenn p am Anfang.key !=Wenn es sich um einen Schlüssel handelt, ersetzen Sie pp und buffer durch p
pp = p
#Setzen Sie den Wert von p auf p, um mit while zum Spitzenknoten zu gelangen.Aktualisiert mit np
p = p.np
Ich habe nicht erklärt, was Hash ist? Nach meinem Verständnis können Sie durch die Bereitstellung eines Schlüssels auf einmal einen Zeiger auf das entsprechende Array erhalten. Sie können es finden, und dann können Sie den entsprechenden Wert durch lineare Suche finden. Es war eine interessante Suchmethode. Um dies zu erreichen, muss es natürlich gemäß dieser Regel gespeichert werden.
Die Artikel wurden bisher nach einer bestimmten Anordnung oder nach derselben Anordnung organisiert. Der Explorationsansatz war grundlegend.
Diesmal ist dies nicht der Fall. Überprüfen Sie die Speichermethode selbst Es war ein interessanter Algorithmus, der das Erkunden erleichterte. (`) Nein
Ich werde das ganze Bild setzen. Es gibt einen optimalen Plan Wenn Sie irgendwelche Probleme haben, lassen Sie es mich bitte wissen. M (_ _) m.
Chained_hash.py
class Node:
def __init__(self,key,value,np):
self.key = key
self.value = value
self.np = np
class ChainedHash:
def __init__(self,capacity):
self.capacity = capacity
self.table = [None]*self.capacity
def add(self,key,value):
Vhash = key % self.capacity
p = self.table[Vhash]
while p is not None:
if p.key == key:
return False
p = p.np
temp = Node(key,value,self.table[Vhash])
self.table[Vhash] = temp
def dump(self):
for i in range(self.capacity):
p = self.table[i]
print(i,end="")
while p is not None:
print(f"=>{p.key}({p.value})",end="")
p = p.np
print()
def search(self,key):
Vhash = key % self.capacity
p = self.table[Vhash]
while p is not None:
if p.key == key:
return print(f"searched value is {p.value}")
p = p.np
print("faile to search")
def remove(self,key):
Vhash = key % self.capacity
p = self.table[Vhash]
pp = None
while p is not None:
if p.key == key:
if pp is None:
self.table[Vhash] = self.table[Vhash].np
else:
pp.np = p.np
pp = p
p = p.np
test = ChainedHash(7)
while True:
num = int(input("select 1.add, 2.dump, 3.search, 4.remove : "))
if num == 1:
key = int(input("key: "))
val = int(input("val: "))
test.add(key,val)
elif num == 2:
test.dump()
elif num == 3:
key = int(input("key: "))
test.search(key)
elif num == 4:
key = int(input("key: "))
test.remove(key)
else:
break
Recommended Posts