Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
!! 17.06.2018 (Jel.) Khanova škola zve nadšence ke spolupráci na překladech návodů pro učitele a rodiče.
! 04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
17.01.2016 (Jel.) Rok 2016 s novými a novějšími krystaly od kolegy Pavla!
17.01.2016 (Jel.) Nabídka knih z oborů matematiky, fyziky, chemie
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 09. 10. 2018 11:37

cheero
Zelenáč
Příspěvky: 2
Škola: SPŠ Písek
Pozice: nadšenec
Reputace:   
 

Algoritmus výpočtu kódu z čísla

Zdravím, může mi prosím někdo objasnit tento výpočet, rozumí tomu někdo ? ? děkuji předem za info

mám číslo M123456 a k tomu dopovídající kód 2487, stejně jako
číslo M000000 a kód 1558 nebo číslo M763412 a kód 9174

6 5 4 3 2 1
Number in the form M,n6,n5,n4,n3,n2,n1

Find lookup table number as follows:

r1 := lookup[n1= 6x 10 + 5]=65th (so if n1 = 6 then r1 = 65th in lookup which is 2)
r2 := lookup[n2= 5x 10 + 3]=53th (so if n2 = 5 then r2 = 53th in lookup which is 7)
r3 := lookup[n3= 4x 10 + 8]=48th (so if n3 = 4 then r3 = 48th in lookup which is 7)
r4 := lookup[n4= 3x 10 + 2]=32th (so if n4 = 3 then r4 = 32nd in lookup which is 4)
r5 := lookup[n5= 2x 10 + 1]=21th (so if n5 = 2 then r5 = 21st in lookup which is 4)
r6 := lookup[n6= 1x 10 + 6]=26th (so if n6 = 1 then r6 = 16th in lookup which is 7)
r7 := lookup[n7= 0x 10 + 9]= 9th (n7 is always 0 and 9th in lookup is also 0)

From the lookup table:

    0 1 2 3 4 5 6 7 8 9

00 9 5 3 4 8 7 2 6 1 0
10 2 1 5 6 9 3 7 0 4 8
20 0 4 7 3 1 9 6 5 8 2
30 5 6 4 1 2 8 0 9 3 7
40 6 3 1 2 0 5 4 8 7 9
50 4 0 8 7 6 1 9 3 2 5
60 7 8 0 5 3 2 1 4 9 6
70 1 9 6 8 7 4 5 2 0 3
80 3 2 9 0 4 6 8 7 5 1
90 8 7 2 9 5 0 3 1 6 4
----------------------------------------------------------------------------------------------------------------------------
The result is the 7 digits r1, r2, r3, r4, r5, r6, r7

Four more values res1,res2,res3 and res4 are then derived from the lookup table as follows:

res1 := lsd{(lookup[r2][r1] + 1) x (lookup[r6][r2] + 1) + (lookup[r4][r3] + 1) x (lookup[r7][r5] + 1) + (lookup[r1][r4])}
72th 77th 47th 04th 24th it from[rx]

res2 := lsd{(lookup[r2][r1] + 1) x (lookup[r5][r4] + 1) + (lookup[r5][r2] + 1) x (lookup[r7][r3] + 1) + (lookup[r1][r6])}
72th 44th 47th 07th 27th it from[rx]

res3 := lsd{(lookup[r2][r1] + 1) x (lookup[r4][r2] + 1) + (lookup[r3][r6] + 1) x (lookup[r7][r4] + 1) + (lookup[r1][r5])}
72th 47th 77th 04th 24th it from[rx]

res4 := lsd{(lookup[r2][r1] + 1) x (lookup[r6][r3] + 1) + (lookup[r3][r7] + 1) x (lookup[r2][r5] + 1) + (lookup[r4][r1])}
72th 77th 70th 74th 42th it from[rx]
where lsd is the least significant digit of the result.


R1 R2 R3 R4 R5 R6 R7
so if number = M123456 then r1..r7 = 2, 7, 7, 4, 4, 7, 0

res1 = (72th=6 + 1) x (77th=2 + 1) + (47th=8 + 1) x (04th=8 + 1) + (24th=1) = 103 and res1 = lsd'103' = 3
7 3 9 9 1

res2 = (72th=6 + 1) x (44th=0 + 1) + (47th=8 + 1) x (07th=6 + 1) + (27th=5) = 75 and res2 = lsd' 75' = 5
7 1 9 7 5

res3 = (72th=6 + 1) x (47th=8 + 1) + (77th=2 + 1) x (04th=8 + 1) + (24th=1) = 91 and res3 = lsd' 91' = 1
7 9 3 9 1

res4 = (72th=6 + 1) x (77th=2 + 1) + (70th=1 + 1) x (74th=7 + 1) + (42th=1) = 38 and res4 = lsd' 38' = 8
7 3 2 8 1
----------------------------------------------------------------------------------------------------------------------------
Another four values are derived from the lookup table as follows:

xres1 := (lookup[res1][5] + 1) x (lookup[res2][1] + 1) + 105
xres2 := (lookup[res2][1] + 1) x (lookup[res4][0] + 1) + 102
xres3 := (lookup[res1][5] + 1) x (lookup[res3][8] + 1) + 103
xres4 := (lookup[res3][8] + 1) x (lookup[res4][0] + 1) + 108

so if serial = M123456 then
xres1 := (35th=8 + 1) x (51th=0 + 1)= 9 + 105 = 114
xres2 := (51th=0 + 1) x (80th=3 + 1)= 4 + 102 = 106
xres3 := (35th=8 + 1) x (18th=4 + 1)=45 + 103 = 148
xres4 := (18th=4 + 1) x (80th=3 + 1)=20 + 108 = 128

code(3) := lsd{xres1(1) + xres1(0) + r1 = 1 + 4 + 2} (=07) = 7
code(2) := lsd{xres2(1) + xres2(0) + r1 = 0 + 6 + 2} (=08) = 8
code(1) := lsd{xres3(1) + xres3(0) + r1 = 4 + 8 + 2} (=14) = 4
code(0) := lsd{xres4(1) + xres4(0) + r1 = 2 + 8 + 2} (=12) = 2 code = 2487

Offline

 

#2 09. 10. 2018 16:09 — Editoval MichalAld (09. 10. 2018 16:22)

MichalAld
Moderátor
Příspěvky: 1552
Reputace:   48 
 

Re: Algoritmus výpočtu kódu z čísla

Já skončil už u toho, co je to číslo M123... čísla, co znám já, v sobě žádné M nemají.

Ale jinak mi to přijde celkem jasné.

Umíš anglicky?

Víš co je look-up table ?

Jediné, co si nejsem jistý je význam té funkce "lsd" co je na konci.

Offline

 

#3 09. 10. 2018 16:51

cheero
Zelenáč
Příspěvky: 2
Škola: SPŠ Písek
Pozice: nadšenec
Reputace:   
 

Re: Algoritmus výpočtu kódu z čísla

Děkuji za odpověď,

písmeno M označuje sérii, ta série je pouze M, žádné jiné písmeno tam není a ani být nemůže.

Za písmenem M začíná samotné sériové číslo a dle uvedeného výpočtu vznikne k danému číslu jedinečný kód.

Bohužel nevím co je look up table :(

Offline

 

#4 09. 10. 2018 17:28

MichalAld
Moderátor
Příspěvky: 1552
Reputace:   48 
 

Re: Algoritmus výpočtu kódu z čísla

Tak to je docela problém, celý postup je na LUT postavený.


Není to ale nic světoborného, je to prostě "řada čísel", nějakých, máš ji tam nakonec napsanou, a pokud máš nahradit nějaké číslo N pomocí té tabulky LUT, tak prostě z té tabulky (řady) vezmeš N-té číslo.

takže pokud máš LUT definovanou jako {5, 2, 8, 21, 55, 37, 200, 0, 31, 52, ....}, tak pro číslo N=0 bude hodnota LUT(N) rovná 5, pro N=1 bude LUT(N) = 2, pro N=2 to bude 8 atd.

Tabulka nemusí být nutně jednorozměrná, může být i 2D, nebo 3D nebo i více (není na to žádné omezení, jen se to pak blbě píše). Ovšem libovolně rozměrnou tabulku lze vždy napsat do jedné řady za sebe.

Tabulka musí mít dostatečnou velikost, podle toho, jaká je maximální možná hodnota toho čísla N, na které chceme transformaci aplikovat.

Pokud bude N 8-bitové číslo, bude mít tabulka 256 hodnot, pro 16bitové číslo musí mít 65 535 hodnot, pro 32 bitové číslo už 4G hodnot. To už je docela problém, používá se to zpravidla pro menší čísla, do těch 16 bitů.

Běžná použití, co mě napadjí:

Zpracování signálů či obrazů, kódování a šifrování (to je tvůj případ), rychlé, byť nepříliš přesné výpočty hodnot matematických funkcí - v situacích, kde je to časově kritické.

Snadno se to implementuje v počítačích i jiném hardware, protože jsou to vlastně jen čísla ze sebou uložená v paměti - a adresa do paměti je tím číslem N.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson