Ik denk nog steeds dat je met de methode, die ik probeerde over te brengen, iets meer dan 15 bits nodig hebt, voor grote aantallen van 3-tupels. mits je dan maar teruggaat naar meerdere subspaces van 32 bij 32 bij 32 (en wel 125 stuks)
het voordeel .. neemt weigin ruimte in beslag.
het nadeel .. je verliest de volgorde van gecreeerde 3-tupels, omdat je ze opslaat per subspace .. en je zult een flinke intermediate memory space nodig hebben.
als voorbeeldje .. (87, 31, 115) komt dan terecht in subspace (2, 0, 3) = 3 * 5^0 + 0 * 5^1 + 2 * 5^2 = 53
in die subspace is de coordinaat (23, 31, 19), herschreven als 5bits .. 10111 11111 10011
laat zeggen dat je een halfword of een word aan het aantal in een subspace opslaat .. dan zijn de kosten voor een subspace:
2 bytes ( max 65536 entries in de subspace, of 4 bytes en dan zijn het er 16 miljoen), plus
N * 15 bits
stel het totaal aantal tupels dat je wilt opslaan is 100 000 .. dan zittern er gemiddeld 800 tupels in een subspace.
het aantal bits is dan 125 * ( 16 + 800 * 15 ) = 125 * 12016 = 1502000 bits
als je 22 bits per tupel zou gebruiken, dan kost het je 2 200 000 bits. ik zou zeggen, ik win. tenzij ik ergens een rekenfout of een denkfout heb gemaakt, wat vast zo is.
en ja, het is dus een inefficient algoritme als het gaat om hele kleine aantallen tupels, en het kan dus ook momenteel niet overweg met subspaces groter dan 64k of 16m respectievelijk .. maar mocht dat nodig zijn, dan kun je zelfs 7 bits voor elke subspace plempen om een index op te slaan van desbetreffende index en dan meerdere subspaces opslaan ipv alleen maar 125 stuks ... en je kunt zelfs die index achterwege laten en gewoon controleren of je een volle subspace_x opslaat, en zo ja, dan komt er nog een achteraan voor desbetreffende index x (die size=0 kan zijn), en zo nee, dan komt daar de volgende subspace_(x+1)
[
Voor 19% gewijzigd door
DrClaw op 22-06-2009 22:30
]