010101011000110011001111 o / \ / \ / \ / \ o \ / \ o / \ / \ o o o T / \ / \ / \ D V H N Ä A
b) Visa med ett exempel hur man går till väga för att dechiffrera transpositionschiffer. T ex GKNTAAKN ESEL
c) 1 1 2 5 6 15 är krypterat med en variant av bokchiffer där man använt uppgiftsnummer istället för sidnummer. Vad står det?
def lzw(text): table = Table() q=Queue() for c in text: # spara texten tecken för tecken i en kö q.put(c) s="" table.add(s) kodtext="" # här sparas den kodade texten while not q.isempty(): c=q.get() if table.exists(s+c): s=s+c else: kodtext+=str(table.code(s))+c table.add(s+c) s="" if not s=="": kodtext+=str(table.code(s)) return kodtextKlassen Table stöder inläggning av strängar, kontroll av om en sträng finns i tabellen och möjlighet att ta reda på index hos en speciell sträng. Index bestäms av ordningen strängarna lades in i, där den första strängen har index 1. Uppgiften är att avkoda följande text, där alfabetet består av versaler och mellanslag kodat som "_".
1S1T1O1R2T4C1K1H4L1M2_6O1L3A1_9O14M1A5Det vill säga: vad är t om
print lzw(t)ger ovanstående som utskrift? Ge också en tabell med strängar och index som motsvarar tabellen i koden!
Tecken | antal | andel ---------------------- m | 4 | 2/9 a | 4 | 2/9 n | 3 | 3/18 " " | 3 | 3/18 ä | 1 | 1/18 r | 1 | 1/18 s | 1 | 1/18 g | 1 | 1/18Detta ger efter trädskapande till exempel följande huffmankoder:
Tecken | Huffmankod ------------------- m | 10 a | 11 n | 010 " " | 011 ä | 0000 r | 0001 s | 0010 g | 0011 Vilket ger följande kodning av texten: 10 11 010 011 0000 0001 011 10 11 010 0010 011 0011 11 10 10 11 010
p = 503 q = 601 n = p*q = 302303 f = (p-1)*(q-1) = 301200 Välj e så att gcd(e, f) = 1 301200 = 2*5*2*5*2*2*3*251 Faktorn 7 finns inte med, välj e = 7 Krypteringen: 18 upphöjt till 7 modulo 302303
Index | sträng -------------------- 1 | "" 2 | "S" 3 | "T" 4 | "O" 5 | "R" 6 | "ST" 7 | "OC" 8 | "K" 9 | "H" 10 | "OL" 11 | "M" 12 | "S_" 13 | "STO" 14 | "L" 15 | "TA" 16 | "_" 17 | "HO" 18 | "LM" 19 | "A"