Glesa datastrukturer och hashing
Jag har ett återkommande problem, vilket har att göra med åtkomst till glesa datastrukturer.
Givet en volym (eller generell hyperrymd) med diskreta koordinater 0 <= x,y,z < N, vill jag spara data (i en array) associerad till vissa koordinater. Exempelvis kan element 0 innehålla data associerad till koordinat (x,y,z) = (2,18,12), element 1 till en helt annan koordinat, etc. Givet ett element i (den glesa) arrayen, kan jag enkelt veta vilken koordinat det handlar om genom att införa en till array som innehåller koordinaterna för respektive index.
Min fråga är, hur i hela friden bär jag mig åt för att åstadkomma det omvända? Dvs jag har en given koordinat (x,y,z) som jag vet finns representerad i den glesa arrayen, men jag vet inte dess index. Hur hittar man indexet? Ett krav är att en kompakt datastruktur (dvs N^3 element) inte får användas då det tar för mycket minne, samt vill jag heller inte söka i den glesa listan. Däremot är det ok att ta lite extra minne. Upp till O(N²) är ok.
Jag vill alltså åt en metod att, givet en koordinat jag vet finns representerad i den glesa listan, kunna beräkna rätt index direkt med bara en liten minnespenalty och hög beräkningseffektivitet. Är detta ens möjligt?
Har försökt söka upp en lösning på nätet, men är osäker på terminologin så har inte hittat något.
(den enda lösningen jag kommit på är att sortera de glesa värdena baserat på det "icke-glesa" indexet av koordinaterna enligt z*N*N + y*N + x. Då bör man kunna hitta sitt värde efter O(logN) sökningar, men jag vill helst undvika att söka.)