Themenbereiche Themenbereiche Profile Hilfe/Anleitungen Help    
Recent Posts Last 1|3|7 Days Suche Suche Tree Tree View  

Effizientes Kodieren von Vektoren

ZahlReich - Mathematik Hausaufgabenhilfe » ---- Archiv: Universitäts-Niveau » Mathematik für Informatiker » Effizientes Kodieren von Vektoren « Zurück Vor »

Autor Beitrag
Seitenanfangvoriger Beitragnächster BeitragSeitenende Link zu diesem Beitrag

Kay Schönberger (kay_s)
Suche alle Beiträge dieser Person in dieser Hauptrubrik
Erfahrenes Mitglied
Benutzername: kay_s

Nummer des Beitrags: 113
Registriert: 01-2001
Veröffentlicht am Sonntag, den 04. Mai, 2003 - 12:37:   Beitrag drucken

Hallo,

Folgendes Problem: Ich habe Vektoren mit 24 Einträgen, davon besitzen genau 12 den Wert "0" und genau 12 den Wert "1". Laut Kombinatorik gibt es also 24!/12!2 = 2704156 solcher Vektoren.
Jedem dieser Vektoren möchte ich nun ein-eindeutig eine Zahl zwischen 1 und 2704156 (oder auch zwischen 0 und 2704155) zuordnen (z. B. für die Speicherung in einem Array).
Dazu benötige ich eine möglichst rechenzeitschonende Funktion. Ich habe mir zwar schon eine Lösung zurechtgebastelt, doch diese benötigt sämtliche Fakultäten bis 24! (selbst mit 64-Bit-Integer nicht darstellbar) und führt zig Multiplikationen/Divisionen aus.
Kennt da jemand vielleicht eine bessere/schnellere Methode?

Kay S.
Seitenanfangvoriger Beitragnächster BeitragSeitenende Link zu diesem Beitrag

Onkel Murray (murray)
Suche alle Beiträge dieser Person in dieser Hauptrubrik
Erfahrenes Mitglied
Benutzername: murray

Nummer des Beitrags: 202
Registriert: 10-2001
Veröffentlicht am Montag, den 05. Mai, 2003 - 09:02:   Beitrag drucken

Hmmm, warum nimmst Du keine Binärkodierung?

Jede Zahl im Computer ist aus Bits zusammengestzt, welche 0 oder 1 sind (das klingt doch sehr nach Deinen Vektoren).
Deine Zahlen bestehen aus 24 bit und erlauben daher 16777216 (2^24) Kombinationen (maximal)

z.B. ist 0101 = 0*2^3+1*2^2+0*2^1+1*2^0 = 5

Du brauchst also nur die Werte deines Vektors auf einen 32bit-Zahl (üblich Integer) 1:1 übertragen und wieder zurück, falls Du wieder den Vektor brauchst. Du könntest auch auch 3 Byte (a 8 Bit) aufteilen, das spart ein Byte Platz.

Rechenen wir mal:
Es gibt 2704156 Vektoren, also 2704156 IntegerZahlen (a 4 Byte) = 10816624 entspricht etwa 10,3 MB Speicher für alle Kombinationen
- mit 3 Byte verbrauchst Du ca. 8 MB.

Es kommt nun darauf an, welche Sprache Du verwendest, aber viele haben BitOperationen.

Onkel Murray
Seitenanfangvoriger Beitragnächster BeitragSeitenende Link zu diesem Beitrag

Kay Schönberger (kay_s)
Suche alle Beiträge dieser Person in dieser Hauptrubrik
Erfahrenes Mitglied
Benutzername: kay_s

Nummer des Beitrags: 114
Registriert: 01-2001
Veröffentlicht am Montag, den 05. Mai, 2003 - 20:25:   Beitrag drucken

Hallo Murray,

Es geht ja um eine effiziente Kodierung. Wenn ich einfach die Bitwerte übernehme, bekomme ich Zahlen zwischen 1 und 16777216, d. h. ich müßte ein Array mit 16,7 Mio. Einträgen anlegen, obwohl nur 2,7 Mio. benötigt werden.
Hintergrund ist ja die Vermeidung der "Redundanz" (also Zahlen, denen kein Vektor zugeordnet ist), da mehrere dieser Arrays im Speicher gehalten werden sollen.
Ich hab' vergessen zu erwähnen, daß ich ja nicht die Vektoren selbst abspeichern möchte, sondern mit ihnen verknüpfte Informationen. Aus einem Vektor berechne ich also eine Zahl 1 <= N <= 2704156 und hole/speichere dann diese Information an Position N im Array.

Kay S.

(Beitrag nachträglich am 05., Mai. 2003 von kay_s editiert)

Beitrag verfassen
Das Senden ist in diesem Themengebiet nicht unterstützt. Kontaktieren Sie den Diskussions-Moderator für weitere Informationen.

ad

Administration Administration Abmelden Abmelden   Previous Page Previous Page Next Page Next Page