Avatar billede torbenkoch Nybegynder
23. juni 2001 - 10:57 Der er 28 kommentarer og
2 løsninger

Checksumme af binære filer og sandsynligheder

Hej alle sammen,

Antag, at man har to filer, som man gerne vil undersøge om de er ens - så kunne man selvfølgelig bare sammenligne dem - har man derimod 200000 (læs: rigtigt mange) filer er denne løsning ikke holdbar.

Derfor ville jeg gerne have en mulighed for at lave en eller anden checksum af filerne og så sammenligne checksummerne.

Er der nogle algoritmer/matematiske udregninger, der siger noget om, at hvis man udregner en checksum sådan eller sådan, så er der f.eks. 90% sandsynlighed for, at to filer er ens, hvis deres checksum er ens?

Alle former for input er velkomment!
Avatar billede erikjacobsen Ekspert
23. juni 2001 - 11:07 #1
Du skal ikke regne med sandsynlighed her.... Lav en checksum på filerne, og
hvis checksummerne er foreskellige er filerne 100% sikkert forskellige.

Har du 2 med ens checksummer, så løber du de filer igennem, for at se om de er
ens. Det er overkommeligt, for det sker kun hvis de faktisk er ens, og så med
0.0000001% (note) sandsynlighed hvis de er forskellige.

(note) tallet afhænger af dit valg af checksum.
Avatar billede jakoba Nybegynder
23. juni 2001 - 11:09 #2
Det er direkte i propotion med længden af checksummen. dvs med en 16bit CRC check er der en 1/64K risiko for at filerne ikke er ens. Hvis du sammenligner på fillængde også er det ganske pænt.

Om det er brugbart afhænger så af hvor forfærdeligt det er hvis testen giver galt resultat :)

mvh JakobA
Avatar billede erikjacobsen Ekspert
23. juni 2001 - 11:10 #3
Nå ja - sådan et program har jeg da i Delphi :)
Avatar billede jakoba Nybegynder
23. juni 2001 - 11:16 #4
hvorfor tænkte jeg ikke på 2-leddet test? ej\'s metode er 100% sikker og sparer en masse tid.
Avatar billede torbenkoch Nybegynder
23. juni 2001 - 11:36 #5
erik:

Du har sådan set ret - men nu er jeg tilfældigvis interesseret i at opnå en mulighed for at beregne sandsynligheden for om filerne er ens, når checksummerne er ens. Jeg er ikke kun interesseret i bare at finde ud af om de er ens, for så ville jeg også bruge din fremgangsmåde.

Jakoba: Du har ganske givet ret i, at længden af checksummen har noget at sige - men har filen som checksummen ikke også en indflydelse på sandsynligheden???

Avatar billede erikjacobsen Ekspert
23. juni 2001 - 11:45 #6
CRC checksummer er \"lavet\" til datatransmission, hvor man også kigger på
sandsynligheden for at fange/opdage små klumper af fejl. Når du bare siger
filer, og de ellers ikke indholdsmæssigt har noget med hinanden at gøre på
bitniveau, så er det længden af checksummen, der er afgørende, som vores
gode ven jakoba, så korrekt anfører.

Mit Delphiprogram \"snød\". Af effektivitetshensyn tog det kun den første 1k
af filen og længden, og beregnede vist kun en xor-checksum. Dem der så var ens
blev checket igennem. Så kunne jeg ret nemt finde dubletter på min harddisk.
Avatar billede torbenkoch Nybegynder
23. juni 2001 - 11:55 #7
Tja, men typisk har man jo netop i datatransmission en fast bloklængde hvoraf man tager checksummen, hvorfor det selvfølgeligt kun er checksummens længde, der er afgørende, ikke??

Rent logisk må f.eks. en 16 bit checksum af en 1K fil være mere \"præcis\" end af en 2K fil.

Det jeg savner er en metode til at beregne sandsynligheden for om de to filer er ens, når checksummerne er ens - hvilket selvfølgelig afhænger af checksumstypen, hvorfor en specifik checksumsmetode også er et godt svar :-)
Avatar billede jakoba Nybegynder
23. juni 2001 - 12:01 #8
\"Rent logisk ...\". 
Nej.  Sandsynligheden er den samme. Det er \"antal mulige måder filerne kan være forskellige\" der vokser med filstørrelsen.
Avatar billede tdaugaard Nybegynder
23. juni 2001 - 12:26 #9
e.j./jakoba:> Det der med CRC checksummer .. nu har jeg ikke læst SÅ meget om det, ej heller brugt det særligt meget (kun een gang i et VB program), men hvis du har en 32bits CRC checksum på en fil, så vil der da aldrig være en anden, forskellig, fil der har den samme checksum!?

Er det ikke det der er hele meningen med et CRC check - at se om en fil er blevet ændret ?
Avatar billede erikjacobsen Ekspert
23. juni 2001 - 12:57 #10
Jo, tdaugaard, der *vil* være milliarder af andre filer med samme checksum.
Bare usandsynligt de vil findes på din maskine. Men seriøst - det er grove
usandsynligt at det skulle ske, men det kan ske.

Almindelige mennesker forstår ikke sandsynlighed. Se bare hvor mange, der
spiller lotto...
Avatar billede jakoba Nybegynder
23. juni 2001 - 12:59 #11
Jo, men hvis det skal være 100% matematisk sikkert skal checksummen være ligeså lang som selve filen. + det skal en ekstra checksum på (ligesålang) for at sikre der ikke er en fejl i den første checksum. + en checksum-3 for at sikre checksum-2. osv. osv. :-)).
I den virkelige verden kan man aldrig være HELT sikker.

Jeg læste engang i en populærbog om relativitet at en gang i fantasillioner af fantasillioner af gange hvor man slap en sten ville stenen falde opad istedet for nedad. Det KAN ske.

men det er ikke ret sandsynligt af det sker for en af os :)

mvh JakobA
Avatar billede tdaugaard Nybegynder
23. juni 2001 - 13:01 #12
erikjacobsen:> så lærte jeg da også noget nyt i dag :-)
Avatar billede tdaugaard Nybegynder
23. juni 2001 - 13:02 #13
jakoba:> Læste du at en sten KAN falde opad en gang ud af en frygteligt masse gange ? Oookay .. og hvordan forklarede bogen så det ? Det kunne være sjovt at vide ..
Avatar billede jakoba Nybegynder
23. juni 2001 - 13:05 #14
PS: David Brin har skrevet en bog \"The Practice Effect\".
Ren Space Opera, men den handler om det.
Avatar billede jakoba Nybegynder
23. juni 2001 - 13:10 #15
Stenen er ikke EEN sten. der er en grusom masse individueller atomer og elektroner og kvarker osv osv, og hvis de nu allesammen \"tilfældigvis\" zigger igstedet for at zagge på et givet tispunkt så gør stenen noget uventet.
Avatar billede tdaugaard Nybegynder
23. juni 2001 - 13:14 #16
jakoba:> \"zigger istedet for at zagge\" *GG*
Avatar billede torbenkoch Nybegynder
23. juni 2001 - 13:41 #17
Jakoba:

Nu jeg tænker lidt nærmere over det - så har du selvfølgeligt ret i, at sandsynligheden er den samme, uanset fillængden - det var lige det med procentregningen, der smuttede :-/

Så nu mangler vi bare at få leveret en eller anden checksums/CRC-algoritme og lidt matematik, så vil jeg være tilfreds.

Forøvrigt lidt morsomt med den sten - håber jeg er der, den dag det sker ;-)

Har det mon forøvrigt noget at gøre med, at den ene sok så tit forsvinder i vasken??? :-)
Avatar billede tdaugaard Nybegynder
23. juni 2001 - 13:44 #18
torbenkoch:> Hvad programmerere du i ? Jeg har en CRC 16/32 algoritme til Visual Basic 5/6 der \"checker\" 6 MB/sec or so ..
Avatar billede torbenkoch Nybegynder
23. juni 2001 - 13:46 #19
Sproget er ligegyldigt, bare man kan gennemskue algoritmen!

Har du nogle sandsynligsberegninger for den? Matematisk velfunderede altså ;-)
Avatar billede tdaugaard Nybegynder
23. juni 2001 - 13:48 #20
torbenkoch:> jeg har ingen sandsynlighedsberegninger, nej :-(
Jeg kan lige prøve at finde den frem ... (CRC\'eren ..) 16 eller 32 bit ?
Avatar billede torbenkoch Nybegynder
23. juni 2001 - 13:50 #21
Begge, tak  *S*
Avatar billede tdaugaard Nybegynder
23. juni 2001 - 13:52 #22
Well .. siden du spørger så pænt ;-)
Avatar billede tdaugaard Nybegynder
23. juni 2001 - 13:58 #23
http://62.242.222.205/Calculate_Checksum_(CRC32_and_CRC16).zip

Jeg ved ikke helt om du kan bruge den da den også bruger noget precompilet Assembler kode, men her er det.
Avatar billede jakoba Nybegynder
23. juni 2001 - 14:02 #24
Avatar billede tdaugaard Nybegynder
23. juni 2001 - 14:03 #25
http://www.planetsourcecode.com/xq/ASP/txtCodeId.4822/lngWId.1/qx/vb/scripts/ShowCode.htm

Link til noget kildekode i VB der ikke bruger ASM, men kun ren VB kode ..
Avatar billede torbenkoch Nybegynder
23. juni 2001 - 14:23 #26
Ok

Jaboka\'s link ser spændende ud - 20 point til ham.
Tdaugaard får også 20 for linket til kildekoden.

ErikJakobsen bidrog (hedder det det?) ikke så meget til løsningen - så han får ikke noget i denne omgang.

Jeg har selv fundet et par stykker her:

http://www.efg2.com/Lab/Mathematics/CRC.htm
http://www-s.ti.com/sc/psheets/spra530/spra530.pdf

hvor jeg tror, at jeg kan læse mig til svaret. Det snupper jeg altså de sidste 20 point for.
Avatar billede torbenkoch Nybegynder
23. juni 2001 - 14:25 #27
Hov - nu gjorde jeg det jo forkert - jeg bliver nok nødt til at lave et lille spørgsmål, for at give tdauggaard hans 20 point....
Avatar billede jakoba Nybegynder
23. juni 2001 - 14:25 #28
What!  Jeg er fortørnet på ej\'s vegne.
Avatar billede tdaugaard Nybegynder
23. juni 2001 - 14:26 #29
*S* det sker en gang i mellem ;-) Men det går nok :-)
Avatar billede torbenkoch Nybegynder
23. juni 2001 - 14:43 #30
Dine 20 kan du hente her:

http://www.eksperten.dk/spm/84019

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester