Speichern eines Bitvektors in nicht initialisiertem Speicher und minimalem Speicherplatz

8

Ein bekannter Trick zum Speichern von Bitvektoren unter Verwendung eines nicht initialisierten Speichers kann einen Bitvektor der Größe zuweisen, bei dem alle Bits auf 0 gesetzt werden, indem ( 2 n + 1 ) lg n Speicherbits zugewiesen und nur lg initialisiert werden n von ihnen. Diese Darstellung unterstützt das Setzen und Deaktivieren von Bits in konstanter Zeit.n0(2n+1)lgnlgn

Dies geht zurück auf "Alfred Aho, John Hopcroft und Jeffrey Ullmans 1974 erschienenes Buch The Design and Analysis of Computer Algorithms ... Kapitel 2, Übung 2.12", "Jon Bentleys 1986er Buch Programming Pearls ... Spalte 1, Übung 8; Übung 9 in der zweiten Ausgabe "und " Preston Briggs und Linda Torczons 1993 erschienene Arbeit "Eine effiziente Darstellung für spärliche Mengen" " .

Dodis et al. den Platzbedarf geringfügig auf ( 2 n + 1 ) lg n + 1 Bit, obwohl dieser Algorithmus die Vorberechnung von Θ ( lg n ) -Konstanten mit Θ ( lg n ) jeweils Bits.(2n+1)lgn+1Θ(lgn)Θ(lgn)

Wie viel Platz kann gespart werden? Gibt es eine Darstellung von Bitvektoren, in denen

  • Bits können in -Zeit gesetzt oder deaktiviert werdenO(1)
  • Das Initialisieren eines neuen Bitvektors von s verwendet o ( n lg n ) Bits des nicht initialisierten Speichers und des O ( lg n ) initialisierten Speichers0o(nlgn)O(lgn)
jbapple
quelle

Antworten:

2

k(2n+1)lgn+kn

k=lgnklgnn/lgnΘ(n)Θ(lgn)

O(1)Θ(lgn)

jbapple
quelle