Autor Beitrag
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 02.04.05 19:51 
Hallo,
ich habe ein problem:
wie kann ich zahlen teilen die z.b. über
9*10^100 stellen haben kann ?
und diese zahle möchte ich dann durch die anzhal-1 der stellen teilen.

der Hintergrund ist folgender:
ich möchte ein eigens packformat schreiben womit man 500 MB auf ca 1 MB komprimieren kann.
Wie ?
Ich öffne eine Datei ermittle mir die Asscicode packe sie zu einer langen kette zusammen und teile diese durch die anzahl -1 und zu wiederherrstellen nehme ich einfach die das ergbnis dieser teilung was ich in einer Dateischreibe und nehme dies mal die anzhal und erhalte so die Asccicode Kette als trennzeichen nehme ich einfach eine zahl die nicht vorkommen kann in diese kette wie z.b. 300. Proble sind nur:
1. Das erstellen dieser Kette würde stunden dauern
2. Das Teilen und das Mal nehmen
dann könnte man noch die datei vorher einmal mit BZIP2 packen und hitnerher auch noch dann müsste ich eigentlich eine datei haben die sehr klein ist: nach meinen vorstellungen.
so Könnte es aussehn
Zitat:

030077300105300993001143001113001153001113001023001630032300873001053001103001003001113001193001153003230088
300803003230072300111300109300101300323006930010030010530011630010530011130011030013300103001330003006930078
300683006630069300783008530084300903009300823004530076300733009030069300783009030086300693008230084300823006
530071300133001030013300103008730073300673007230084300733007130032300453003230066300733008430084300693003230
079300823007130070300196300763008430073300713003230076300693008330069300783005830032300683001053001013001153
00101300114300323006930011030010030098300101300110300117300116300122300

habe schon mit dem Komprimieren angefangen hier als trennzeichen 300

Moderiert von user profile iconAXMD: Zeilenumbrüche eingefügt.

_________________
MFG
Michael Springwald, "kann kein englisch...."


Zuletzt bearbeitet von mimi am Sa 02.04.05 19:58, insgesamt 1-mal bearbeitet
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 02.04.05 19:55 
Hi!

Ändere bitte deinen Titel (entweder ganz ohne Zahl oder 9*10^100 (oder wieviel Stellen das auch immer sind)).

Danke :)
AXMD
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Sa 02.04.05 20:00 
mimi nach deiner postanzahl abe ich eigentlich erwartet das du bisl erfahrung hast... die datei kannst du so nicht packen, denn du musst die ja den teiler merken, und das ergebnis

der teiler ist ja nur um 1 byte geschrumpft das ergebnis ist eventl nen dezimalzahl und die kannste net so einfach speichern oO

also lass es lieber bleiben das bringt nix ^^

und zu dem wie man das generell macht
nimm nen record
x,y: cardinal;

dann haste ja 64 bit = zahlen von 0..2^64-1
die veraltung musste dann selbst machen

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 02.04.05 20:19 
Zitat:

mimi nach deiner postanzahl abe ich eigentlich erwartet das du bisl erfahrung hast

Leider sagt die Postzahle nicht über die erfahrung aus.

Zitat:
die datei kannst du so nicht packen, denn du musst die ja den teiler merken, und das ergebnis

Ja ich weiß ich dachte mir ich schreibe den Teiler(also die Anzahl der Zahlenkette) in einer Datei und Das ergbnis.
z.b.

50300503004030060300
diese zahle teile ich jetzt durch die anzahl also 20 stellen

hast recht... habst gerade mal getestet ich dachte die anzahl währe kleiner

dann müsste man diese zahl durch:
50300503004030060300 div 5030050300403006030 teilen und das würde nichts bringen

nagut dann müsste man nur den kleinstmöglichen teiler finden z.b. die Hälfte. Aber das umwandeln der Datei in reichen Asscicode komprimiert ja auch schon etwas(bei einer datei die z.b. 74,4 KB groß ist verkleinert er diese auf 5 kb *G*

_________________
MFG
Michael Springwald, "kann kein englisch...."
Backslash
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 202

WIN XP
Delphi 5 Ent, Delphi 2005 Prof
BeitragVerfasst: Mo 04.04.05 11:00 
Zitat:
ich möchte ein eigens packformat schreiben womit man 500 MB auf ca 1 MB komprimieren kann.


Hallo Mimi,

ich möchte dir ernsthaft anraten, dich zumindest ein Stück weit mit bisher existierenden Verfahren wie BWT, PPM, etc. zu befassen, bevor du daran denkst einen Packalgorithmus dieser Stärke zu entwickeln. Ich find das wirklich interessant, dass immer noch Leute Packraten von 500:1 möglich halten. Nunja so unmöglich ist das ja gar nicht, wenn die Datei viele Lauflängen enthält ;-) Ich habe erst kürzlich selbst einen Thread zu diesem Thema geführt und feststellen müssen wieviel ich an Basiskenntnissen noch nicht hab, obwohl ich mich die letzten 5 Jahre intensiv mit dem Thema beschäftige.

Ich möchte dich nicht entmutigen aber du wirst für diese Problemstellung 500:1 keine Lösung finden. Die Idee mit dem kleinsten gemeinsamen Teiler hatten schon andere. Wie bereits erwähnt würde das Speichern dieses Teilers die Datei im Endeffekt sogar vergrößern.

Zitat:

der teiler ist ja nur um 1 byte geschrumpft das ergebnis ist eventl nen dezimalzahl und die kannste net so einfach speichern oO


Das Ergebnis evtl ne Dezimalzahl??? :gruebel: Die Basis des binären Zahlensytems ist 2. Entweder die Binärzahl ist gerade, dann kann ich durch 2 teilen oder sie ist ungerade, dann kann ich nicht durch 2 teilen. Kleinster gemeinsamer Teiler bedeutet im binären Falle, dass keine Dezimalzahl rauskommt, sonst würd man überhaupt keine Verkleinerung erreichen oder irre ich mich da?. :roll: Die Idee mit dem kleinsten gemeinsamen Teiler hatte ich vor längerer Zeit, als ich ein Verfahren zur verlustfreien Wav-Kompression entwickeln wollte. Hab das schnell aufgegeben, da die Packraten zu niedrig sind.

Wer weiß, vielleicht kommst du mit der Idee ja weiter? :wink:

Ansonsten findest du ein paar Informationen zu vorhandenen Verfahren hier:
www.faqs.org/faqs/co...part1/section-8.html
[url]www.data-compression.info[/url]
[url]www.datacompression.info[/url]

Dort wirst du sehr viele Links zum Thema 500:1 -Kompression finden. Wenn du dafür ne Lösung findest, dann respekt. Dagegen verblasst mein Algo mit einer minimalen Rate von 0,4 % erheblich :wink:

Viele Grüße

\\ Backslash \\
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mi 06.04.05 20:28 
Zitat:
ch möchte dich nicht entmutigen aber du wirst für diese Problemstellung 500:1 keine Lösung finden. Die Idee mit dem kleinsten gemeinsamen Teiler hatten schon andere. Wie bereits erwähnt würde das Speichern dieses Teilers die Datei im Endeffekt sogar vergrößern.

das dachte ich mir schon,es muss einen hacken geben.
Aber ich glaube ich habe eine lösung gefunden:
ich teile diese AsccicodeKette einfach durch eine sehr kleine zahl und sorgedafür das die , weg kommen, das wird zwar tage dauern, aber es dürfte klappen

Danke für deine antwort, dann bin ich ja nicht der einzigte der diesen Traum hat *G*

_________________
MFG
Michael Springwald, "kann kein englisch...."
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mi 06.04.05 21:30 
Zitat:
Wer weiß, vielleicht kommst du mit der Idee ja weiter? :wink:

bestimmt, ich habe ein zwei ideen wobei die erste noch eine weilie dauern dürfte, weil dort muss ich eine geeignette asccitabbelncode finden und bei der zweiten: naja, dort kannst wenn du z.b. 500 MB packen möchtes tage dauern bis er es dann auf eine zwei stellige zahl gebracht hat und dann muss sie ja auch wieder hergestlelt werden, ich würde sagen das geht nur auf die Rechnern der Zukunpf die 16 Funktionen gleichzeitigausführen können bzw. das es Bool werte gibt mit 16 zustenden(ich weiß nicht wie die rechner geschrieben werden)

Aber ich halte es für machbar, von 4 GB auf 1 KB zu kommmen, es muss nur richtig angepackt werden und das braucht zeit !!!
Danke für die Links die werde ich mir mal ansehen.

Edit: Habe die lings mir angeschaut, sie sind leider alle auf englisch, aber ich werde mich mit diesem Thema noch genauer auseinander setzen !!!

_________________
MFG
Michael Springwald, "kann kein englisch...."
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mi 06.04.05 21:41 
user profile iconmimi hat folgendes geschrieben:
Aber ich halte es für machbar, von 4 GB auf 1 KB zu kommmen, es muss nur richtig angepackt werden und das braucht zeit !!!
Danke für die Links die werde ich mir mal ansehen.

4GB -> 1KB ??

wieso kann man dann diese 1KB datei mit dem verfahren nicht wieder komprimieren?

1kb -> 1Byte

das wäre dann der zweite schritt, oder?

:twisted: :roll:
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Do 07.04.05 08:48 
Zitat:
4GB -> 1KB ??

wieso kann man dann diese 1KB datei mit dem verfahren nicht wieder komprimieren?
das wäre dann der zweite schritt, oder?

1kb -> 1Byte
meinst du damit weiter komprimieren ?
ja natürlich du hast eine 3000000000000 stellige zahle teilst die dann einfach nur 5 so oft wie es gerade geht und wenn nichts meht geht nimmst du einfach einen andren Teiler bis du eine z stellige zahl hast und dann speicherst du ab, wie oft du nur 1000, duch 5, durch... geteilt hast und kannst die nacher und voher mit zip packen(evtl.)

Problem ist halt nur, es wird sehr sehr sehr lange dauern bis die Pack oder Entpack funtkion fertig ist

_________________
MFG
Michael Springwald, "kann kein englisch...."
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 07.04.05 11:22 
user profile iconmimi hat folgendes geschrieben:

Problem ist halt nur, es wird sehr sehr sehr lange dauern bis die Pack oder Entpack funtkion fertig ist


Dann fang klein an und probiers mit ner 10mb Datei, dann poste mal deinen Link..
Oder meinst du mit dem Satz, dass du sehr sehr lange brauchst um die Funtkionen zu schreiben? :wink:
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Do 07.04.05 11:50 
Zitat:
Oder meinst du mit dem Satz, dass du sehr sehr lange brauchst um die Funtkionen zu schreiben? :wink:

das wird sich noch zeigen. ich dachte mir das jetzt so: ich teile eine sehr große zahl durch eine sehr kleine zahl(könnt ihr mir folgen :D ?) und fertig bis ich aus einer sehr großen zahle eine zwei oder ein stellige zahl habe nur den weg wie ich dahin gekommen bin muss ich in einer datei schreiben z.b. so:
20 X = 30
10 X = 5

das heißt dann:
ich habe die große zahl 30 mal druch 20 geteielt und weil es dann mit 20 nicht mehr ging habe ich 10 genommen und zwar 5 mal das müsste doch klappen oder ?
und beim wiederherstellen der Sehr großen zahl gehe ich genauso vor halt nur *:
ich nehme zuerst 5 * 10 und dann dieses eregbnis also 50 nehme ich 20 mal 30 und so müsste ich auf die zahl kommen die ich voher hatte,oder ist das falsch ? mit kleinen zaheln geht das:

49 / 7 = 7 weil 7 * 7 sind 49 siehe an: ich habe richtig gerechnet *G*
(sollte doch auch mit großen zahlen gehen oder ?)
das wird lustig wenn die funktion fertig ist:
4 GB > 1 KB und brauchst Tage um die daten wiederherzustellen *G*, naja evlt. gibt es sogar einen weg wie ich diese funktion verschnellern könnte mal sehen..... problem sind halt nur diese langen zahlen ketten

_________________
MFG
Michael Springwald, "kann kein englisch...."
ScorpionKing
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1150

Win XP

BeitragVerfasst: Fr 08.04.05 16:20 
du glaubst doch nicht ernsthaft das du 4 gb auf 1 kb schrumpfen kannst?

_________________
Aus dem Urlaub zurück!
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 08.04.05 16:38 
Zitat:
du glaubst doch nicht ernsthaft das du 4 gb auf 1 kb schrumpfen kannst?

Wohl nicht auf 1 KB aber auf 2-10 MB bestimmt, wenn man die noch packt mit zip könnte es evlt. 5 MB werden und dann nocheinmal mit meiner funktion rüber dann wird es bestimmt irgenwann nach wochen 1 KB *G*

_________________
MFG
Michael Springwald, "kann kein englisch...."
ScorpionKing
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1150

Win XP

BeitragVerfasst: Fr 08.04.05 16:58 
wenn du so einen algorithmus erfunden hast, dann sag ich: hut ab! das hat ja noch nicht einmal ein riesiges team geschafft!

_________________
Aus dem Urlaub zurück!
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 08.04.05 17:07 
Zitat:
wenn du so einen algorithmus erfunden hast, dann sag ich: hut ab! das hat ja noch nicht einmal ein riesiges team geschafft!

darum habe ich ja auch gute chancen.

Ich glaube inwzischen das sich meine idee da nicht umsetzten läst aber wenn wird es Stunden/Tage/Wochen/Jahre dauern bis du eine 4 GB große datei zu 1 KB/ 10 MB gepackt hast :D

mal schauen, aber darum ging es eigentlich nicht, es ging ja nur darum eine sehr große zahl zu verkleinern und dann wiederherrzustellen.... z.b. wenn ich folgende zahl habe:
530063009300530063007300530011300123001330014300153001530016

diese zahl möchte ich genre auf eine 2-3 stellige zahl verkleinern und ich muss sie ja auch wiederherrstellen....
dafür muss es doch möglichkeiten geben, da ich nicht so gut mahte kann und auch nur die 4 Grundrechenarten und % und Dreisatzt kann. Kenne ich diese möglichkeiten leider nicht, aber es muss gehen.

Mit kleinen Zahlen geht das doch auch:
7*7 = 49
49 / 7 = 7

wist ihr was ich meine ?

_________________
MFG
Michael Springwald, "kann kein englisch...."
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Fr 08.04.05 17:13 
mimi du macht da was falsch, glaub mir einfach das wird nicht gehen
alleine schon an dem beispiel:

49 / 7 = 7 weil 7 * 7

49 wäre ein byte zum speichern
7*7 müsstest schon 2 bytes haben, die zahl an sich ist zwar kleiner aber zum speichern bruacht du mehrere bytes

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 08.04.05 17:25 
Zitat:
7*7 müsstest schon 2 bytes haben, die zahl an sich ist zwar kleiner aber zum speichern bruacht du mehrere bytes


naja das war nur ein kleines beispiel, bei den großen zahlen würde ich durch konstante zahlen teilen, aber ich habe auch das gefühl das es nicht geht. Hatte heute mal etwas rumgetestet und habe es nicht geschaft die "alte" zahlenfolge widerrherzustellen. Das ist noch einproblem. Das teilen mag ja noch gehen, aber ich brauche ja die gleiche zahl wider. sons gehen ja daten verloren :(

ich hatte da noch eine andre idee, aber die geht nicht so einfach da habe auch noch keine lösung gefunden, kann sein, das ich in ein paar jahren draufkomme *G*

_________________
MFG
Michael Springwald, "kann kein englisch...."
I.MacLeod
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 109



BeitragVerfasst: Fr 08.04.05 17:37 
@mimi:

Denk mal an folgendes:

in einem byte kannst du 2^8 verschiedene Zahlen speichern, in zwei bytes 2^16, in drei 2^24 usw. Mit anderen Worten: in einem Byte lassen sich genau 256 verschiedene Datensätze / Dateien / irgendwas speichern.

Für 2^n bits heißt das also: 2^n verschiedene Dateien. Wenn du jetzt 2^n bits mit einem Algorithmus garantiert um nur 1 bit verkleinern willst, kannst du nur noch 2^(n-1) verschiedene Dateien darstellen, du "verlierst" also jede zweite Möglichkeit. => RAD-Kompressoren sind unmöglich

_________________
{$APPTYPE CONSOLE}uses SysUtils;const a='{$APPTYPE CONSOLE}uses SysUtils;const a=%s;begin write(Format(a,[#39+a+#39]))end.';begin write(Format(a,[#39+a+#39]))end.
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 08.04.05 18:01 
Vileicht hast du recht heute sind sie unmöglich aber in 100 Jahren evtl. nicht mehr *G*

_________________
MFG
Michael Springwald, "kann kein englisch...."
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 08.04.05 18:12 
Schenkst Du mir das Patent auf den Algo, wenn Du fertig bist???

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.