Homofony

0

Witam.

Pisze program do szyfrowania, napotkalem na porblem z utworzeniem tablicy homofonow.
Chcialbym aby program przy kazdym starowaniu generowal tablice homofonow. Pomyslalem aby znaki textu beda od 0 do 122 (w ascii) od 123 do 255 beda homofonami..
problem w tym ze nie wiem jak to zaimplementowac.. Dosc glupim rozwiazaniem bylo by deklarowanie 122 tablic i przypisaniu do nich kilku homofonow. Moze ktos z was rozbil podobne zagadnienie i moglbymnie naprowadzic na jakies rozwiązanie?

Pozdrawiam

0

Obawiam się, że nikt nie rozumie co chcesz osiągnąć.
Podaj jakiś przykład: tekst i to co chcesz z niego otrzymać.

0

Chodzi mi o szyfrowanie homofoniczne.
z definicji:
"W szyfrach tych każdy znak tekstu jawnego mi jest odwzorowany na jeden znak ze zbioru
f(ni) tekstu zaszyfrowanego, przy czym zbiory f(ni) są rozłączne. Znaki zbioru f(ni)
nazywane są homofonami. Tekst jawny n = n1, n2, … jest zaszyfrowany jako z = z1, z2, …,
przy czym znaki ci wybiera się dowolnie ze zbioru homofonów f(ni)."
Przyklad tabeli homofonow:
Litera - Homofony
A - 19 34 41 56 60 73 83 96
B - 31
C - 27 59 62 81
D - 11 28 77
E - 10 23 42 49 61 88 99
F - 76
G - 23

Takze w szyfrze znak w texcie moze przyjmowac wartosci np dla litery A np .19, ale rownie dobrze moze przyjac ewatrtosc 41 lub inna ze zbioru jaki sobie zadeklarujemy.

Teraz moj problem jest nastepujący, nie mam pomyslu aby jakos schludnie ta tablice zbiorow homofonow zadeklarowac. Zakladam dopuszczalne znaki w texcie jawnym o indexach w kodzie ascii od 32 do 122 , czyli 90 znakow, pozostale znaki w ascii moga posluzyc mi jako homofony.
Wydaje mi sie ze deklarowanie z gory 90 tablic jest troche nieeleganckie. Chcialbym aby przy kazdym starcie programu do alfebetu znakow od 32 do 122 przyporzadkowywano losowo, za kazdym razem nowy zbior homofonow. Czy ma ktos jakis sposob oprocz deklarowania z gory 90ciu tablic ?

0

A jak sobie wyobrażasz odszyfrowywanie, jeżeli tablice homofonów będą losowane?
OT. Od 32 do 122 jest 91 znaków.

0

W C(C++) zatrzymałem się na poziomie podręcznika Kernighan, Ritchie - nie mam zatem pojęcia o dostępnych w C++ kolekcjach. W Javie do pamiętania homofonów użyłbym hashmapy, kluczami byłyby znaki od ' '(32) do 'z' (122). Wartościami byłyby ArrayListy (odpowiednik wektorów). Losowanie byłoby dwuetapowe:

  • losujemy wielkość homofonów, najprostszy algorytm jest taki: wielkość pierwszego homofonu należy do przedziału <1;256-90>, jeżeli wylosowano n1, to wielkość drugiego homofonu należy do przedziału <1;256-89-n1>,...
  • losujemy elementy homofonów.
    P.S. Imho homofony mogą zawierać wszystkie bajty, dlatego losuję z 256 dostępnych. Elementy homofonów mogą być ciągiem kilku bajtów, wystarczy by żaden element żadnego homofonu nie był początkiem innego elementu. Będzie tak gdy wszystkie elementy homofonów będą miały taką samą długość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1