Nie mam pojęcia, w jaki sposób implementacja Trie pozwala zaoszczędzić miejsce & przechowuje dane w najbardziej kompaktowej formie!Trie oszczędza miejsce, ale jak?
Jeśli spojrzeć na drzewo poniżej. Gdy przechowujesz znak w dowolnym węźle, musisz również zapisać odniesienie do tego &, tak aby dla każdego znaku ciągu trzeba było zachować jego odniesienie. OK, zaoszczędziliśmy trochę miejsca, gdy pojawiła się zwykła postać, ale straciliśmy więcej miejsca na przechowywanie odniesienia do tego węzła postaci.
A więc czy nie ma zbyt wiele strukturalnych kosztów utrzymania tego drzewa? Zamiast tego, gdyby zamiast tego została użyta TreeMap, powiedzmy, aby zaimplementować słownik, mogłoby to zaoszczędzić dużo więcej miejsca, ponieważ ciąg byłby przechowywany w jednym kawałku, a więc nie zmarnowałoby się miejsca na przechowywanie odniesień, prawda?
Jeśli węzeł zajmuje 16 bajtów, ale jest ponownie wykorzystywany w więcej niż 16 ciągach (8 w Javie), oszczędza miejsce. To jest po prostu kwestia, czy zaoszczędzisz więcej miejsca niż marnujesz. Zakładając, że liczby niebieskie w twoim przykładzie liczą się powtórnie, oszczędności okazują się większe niż zmarnowana przestrzeń, w porównaniu do prostej tablicy łańcuchów. Jednak w tym przypadku byłoby jeszcze lepiej przechowywać kompletne ciągi z liczbą powtórzeń. – han