Datu saspieŔanas paradoksi

Datu saspieÅ”anas paradoksi Datu saspieÅ”anas uzdevums savā visvienkārŔākajā formā var attiekties uz skaitļiem un to apzÄ«mējumiem. Skaitļus var apzÄ«mēt ar cipariem (ā€žvienspadsmitā€ numuram 11), matemātiskām izteiksmēm (ā€ždivi divdesmitajÄā€ numuram 1048576), virknes izteiksmēm (ā€žpiecas devÄ«tniekusā€ numuram 99999), Ä«paÅ”vārdiem (ā€žbeasts skaitsā€ numuram 666, ā€žTjÅ«ringa nāves gadsā€ numuram 1954), vai ar nejauÅ”u to kombināciju. Der jebkāds apzÄ«mējums, ar kuru sarunbiedrs var viennozÄ«mÄ«gi noteikt, par kuru skaitli ir runa. AcÄ«mredzami, ka sazināties ar sarunbiedru par ā€žastoņu faktoriāluā€ efektÄ«vāk nekā ar ekvivalentu apzÄ«mējumu ā€žÄetrdesmit tÅ«kstoÅ”i trÄ«sdesmitā€. Å eit rodas loÄ£isks jautājums: kāds apzÄ«mējums dotajam skaitlim ir Ä«sākais?

Filozofs Bertrands Rasels 1908. gadā publicēja ā€žBerija paradoksuā€, kurā tiek apspriests apzÄ«mējumu jautājums no pretējās puses: kāds ir viss mazākais skaitlis, kam apzÄ«mēŔanai nepietiek ar astoņdesmit burtiem?
Šādam skaitlim ir jānāk eksistēt: no astoņdesmit krievu burtiem un atstarpēm var izveidot tikai 3480 apzÄ«mējumus, lÄ«dz ar to, izmantojot astoņdesmit burtus, nav iespējams apzÄ«mēt vairāk par 3480 skaitļiem. Tātad skaitli, kas ir ne lielāks par 3480, apzÄ«mēt Ŕādā veidā nav iespējams.

Tādējādi Å”im skaitlim atbilst apzÄ«mējums ā€žviss mazākais skaitlis, kam apzÄ«mēŔanai nepietiek ar astoņdesmit burtiemā€, kurā ir tikai 78 burti! No vienas puses, Å”im skaitlim ir jāpastāv; no otras puses, ja Å”is skaitlis pastāv, tad tā apzÄ«mējums tam neatbilst. Paradoks!

VienkārŔākais veids, kā atrauties no Ŕī paradoksa, ir atsaukties uz neformālu vārdiski izteikumiem. Sakot, ja apzÄ«mējumos bÅ«tu pieļaujams tikai konkrēti noteikts izteikumu kopums, tad ā€žviss mazākais skaitlis, kam apzÄ«mēŔanai nepietiek ar astoņdesmit burtiemā€ nepietiekami apzÄ«mējums nebÅ«tu pieļaujams, kamēr praktiski noderÄ«gi apzÄ«mējumi, piemēram, ā€žastoņu faktoriāluā€ paliktu pieļaujami.

Vai ir formāli veidi, kā aprakstÄ«t secÄ«bu (algoritmu) darbÄ«bu ar skaitļiem? Ir, un to netrÅ«kst — tos sauc par programmēŔanas valodām. Izmantosim programmas (piemēram, Python), lai izvadÄ«tu nepiecieÅ”amos skaitļus. Piemēram, piecām devÄ«tniekus derēs programma print("9"*5). Mēs joprojām interesējamies par Ä«sāko programmu noteiktam skaitlim. Šādas programmas garumu sauc par Kolmogorova sarežģītÄ«bu skaitļa; tas ir teorētiskais limits, lÄ«dz kuram noteikto skaitli var saspiest.

Aiz Berija paradoksa tagad varam aplūkot līdzīgu: kāds ir vissīkākais skaitlis, kura izvadīŔanai nepietiek ar kilobaitiem kodu?

Mēs domāsim tāpat kā iepriekÅ”: ir 2561024 kilobaitu teksti, tādēļ ar kilobaita programmām var izvadÄ«t ne vairāk kā 2561024 skaitļus. Tātad, ir kāds skaitlis, kuru ne vairāk par 2561024 nevar izvadÄ«t Ŕādā veidā.

Tomēr uzrakstÄ«sim Python programmu, kas Ä£enerē visus iespējamos kilobaitu tekstus, izpilda tos, un, ja tie izvada kādu skaitli — pievieno Å”o skaitli sasniedzamo skaitļu vārdnÄ«cā. Pēc visu 2561024 iespēju pārbaudes, neatkarÄ«gi no tā, cik ilgi tas prasÄ«s — programma meklē, kurÅ” ir vissÄ«kākais skaitlis, kas trÅ«kst vārdnÄ«cā, un izvada Å”o skaitli. Izskatās acÄ«mredzami, ka Ŕāda programma iekļausies kilobaitā kodu — un izvadÄ«s to paÅ”u skaitli, kuru nav iespējams izvadÄ«t ar kilobaita programmu!

Kur ir tagad viltība? Neformālās apzīmējumi vairs nav attaisnojums!

Ja jÅ«s mulsina tas, ka mÅ«su programma prasÄ«s astronomisku atmiņas daudzumu darbam — vārdnÄ«ca (vai bitu masÄ«vs) ar 2561024 elementiem — tad to paÅ”u var izdarÄ«t arÄ« bez tā: katram no 2561024 skaitļiem secÄ«gi pārbaudÄ«t visas 2561024 iespējamās programmas, lÄ«dz atrodam piemērotu. Nav svarÄ«gi, ka Ŕāda pārbaude ilgs ļoti ilgi: pēc mazāk kā (2561024)2 pāru skaitļa un programmas pārbaudes, tā beigsies un atradÄ«s to paÅ”u svēto skaitli.

Vai arÄ« nebeigsies? Jo starp visām programmām, kas tiks izmēģinātas, tiks sastapts while True: pass (un tās funkcionālās analoÄ£ijas) — un tālāk Ŕādas programmas pārbaude vairs neies tālāk!

AtŔķirÄ«bā no Berija paradoksa, kur viltÄ«ba bija neformālajos apzÄ«mējumos, otrajā gadÄ«jumā mēs saskaramies ar labi maskētu pārformulējumu Ā«apstāŔanās problēmuĀ». Problēma ir tāda, ka no programmas nav iespējams noteikt tās izvadÄ«jumu ierobežotā laikā. It Ä«paÅ”i, Kolmogorova sarežģītÄ«ba nav aprēķināma.: nav nekāds algoritms, kas ļautu noteikt Ä«sākās programmas garumu, kas izvada dotu skaitli; tātad, nav arÄ« risinājuma Berija uzdevumam — atrast dotajam skaitlim Ä«sākā vārdiskā apzÄ«mējuma garumu.

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster