"Jako oszczędność miejsca jako zwykły stolik do mieszania" jest dość ogólnikową specyfikacją, ponieważ "zwykła" może oznaczać powiązanie lub sondowanie w zależności od tego, kogo pytasz. Nie sądzę, aby ktokolwiek zaprojektował łatwe do zrozumienia, trwałe tablice skrótów.
Najprostszym sposobem uzyskania trwałej mapy klucz-wartość o złożonej strukturze jest użycie stałego drzewa wyszukiwania binarnego. Lookup jest znanym algorytmem z efemerycznych (nietrwałych) BST. Włóż zmiany jednak i staje się mniej więcej tak (pseudo-Java):
// overwrites the value for k if it's already in the tree
Node insert(Node node, Key k, Value v)
{
if (k < node.key)
return new Node(node.key, node.val, insert(node.left, k, v), node.right);
else if (k > node.key)
return new Node(node.key, node.val, node.left, insert(node.right, k, v));
else
return new Node(k, v, node.left, node.right);
}
Należy pamiętać, że rutynowe wkładka wraca nowe drzewo, które może wydawać się nieskuteczne, ale zmienia tylko te węzły przemierza. Jest to średnio O (lg n), więc przydziela średnio O (lg n). Dotyczy to tak wydajnej przestrzeni, jak to tylko możliwe.
Aby uzyskać najgorszy możliwy scenariusz O (lg n), użyj drzewa czerwono-czarnego. Zobacz także literaturę dotyczącą struktur danych w programowaniu funkcjonalnym, np. dzieła Okasaki.
W tym artykule wikipedii istnieje co najmniej 5 różnych rodzajów trwałych, jakiego rodzaju wytrwałości szukasz? –
Pełna trwałość, po prostu zaktualizowano oryginalny wpis – ManRow
Jeśli dobrze zrozumiałem Twój problem, jeśli chcesz, aby każde dziecko dziedziczyło tabelę mieszania od swojego rodzica, możesz po prostu utworzyć głęboką kopię tabeli mieszania za każdym razem, gdy dziecko zostanie utworzone/dodane . – Muggen