„Adattömörítő algoritmust fejleszteni olyan, mint sakkozó algoritmust fejleszteni - specializált.“

Általános gondolatok (szoftverekre)

Azok a tömörítő programok a jók, amelyeknek nagy a gyakorlati haszna. A gyakorlatban a felhasználó valószínűleg olyan fájlt akar tömöríteni, amelyik valamelyik ismert fájlformátumba tartozik, vagy szöveges fájlok esetén ismert használati esetekbe, mint például a log fájlok, az egyszerű szövegek, vagy a program forráskódok, stb. A legjobb tömörítő programoknak a legtöbb ismert fájlformátumot pontosan ismerniük kell, és az ezek által hordozott információt egy olyan tömörített fájlformátumban kell tárolniuk, amely az eredeti fájlformátumhoz illik (veszteségmentesen), illetve tekintetbe kell még venniük az egymáshoz hasonló fájlokat (pl. hasonló fényviszonyoknál készített fényképeket). Ez egy hatalmas szoftvert igényelne, sok munkát (mint pl. amennyit a Prezi készítői rááldoztak), tehát nem egy magányos hobbi-programozó feladata egy gyakorlatban is kiemelkedően versenyképes tömörítő programot készíteni. Ez valószínűleg nem is a nagy cégek feldata, mivel a ROI (a befektetés megtérülése) alacsony lehet, hiszen egy rendszeradminisztrátor általában dönthet úgy, hogy átkonvertálja az adatokat, és a tárhely szempontjából a legkedvezőbb fájl formátumban tárolja azokat. Van egy kivétel ez alól, az MI (vagy angolul AI, mesterséges intelligencia), amely képes lehet a fájl formátumokról tanulni és felhasználni ezt a tudást a tömörítéshez, de tulajdonképpen ez sokkal nehezebbnek tűnik, mint tömörítő programkódot írni manuálisan különböző fájlformátumokra, és a mi célunk itt csak a tömörítés, és talán csak valami, ami képes megnyerni a Hutter Prize-t.

Kis algoritmusok híresek lehetnek

Mégis, lehetségesnek kell lennie olyan algoritmusokat írni, amelyek jobbak, mint más algoritmusok az általános esetben, vagy a Hutter Prize példájának esetében. A tömörítési eljárások fejlődésének történetét a rendezési algoritmusok fejlődésének történetéhez lehetne hasonlítani, amelyek közül sok híres. Ez viszont nem egy hagyományos szoftverfejlesztési feladat, mert talán sikerül, talán nem. Ez inkább egy kutatási és kreativitást igénylő feladat, amit csak intelligens emberek képesek megoldani.

Ingyenesen érdemes terjeszteni

Ha képes leszünk találni egy kis, általános tömörítési algoritmust, hasonlót a ZIP-hez (vagy LZW-hez) csak sokkal hatékonyabbat, valószínűleg érdemes lesz ingyenesen terjeszteni (pl. egy MIT licenszű programkönyvtárként, különböző programozási nyelveken, különböző operációs rendszerekre írt szoftverekkel), mert sok tömörítő algoritmus (és szoftver) van a piacon, és valószínűleg ingyenesnek kell lennie ahhoz, hogy elterjedjen, még akkor is, ha képes lenne megnyerni a Hutter Prize-t. A ZIP fájlformátum népszerűség területén való felülmúlásáért járó lehetséges hírnév valószínűleg többet ér, mint egy jogvédett fájlformátumból bejövő lehetséges pénz, hiszen már vannak más jogvédett tömörített fájlformátumok is a piacon.

Ez sem a szegényeknek való

Kiderülhet, hogy a legtöbb operációs rendszer biztonsága gyenge, ha profi ellenségeink vannak az Interneten vagy máshol. Ez azt jelenti, hogy esetleg nem éri meg egy hosszútávú prodzsektet fejleszteni a számítógépünkön annak publikálása nélkül, mert máskülönben a cracker hackerek ellophatják azt a számítógépünkről, és publikálhatják mielőtt mi megtesszük azt. Csak a gazdagoknak van elég erőforrása ahhoz, hogy megvédjék a gépeiket az ilyen támadásoktól, pl. úgy, hogy egy csak Internet nélkül használt számítógépet tartanak egy széfben csak a fejlesztésekre, amelyre őrök is vigyáznak. Nem a szegények felelőssége a környezet védelméért sok áldozatot hozni, hanem a gazdagoké. A szegényeknek olyan örömforrásokra van szüksége, mint például a matematika, a szeretet vagy az unaloműzés.

Amúgy ez lett volna a tömörítő program ötlete

A tömörítő program feladata matematikai problémaként is leírható: van egy számsorozat (ami jelenthet szavakat is, betűket is), amelyben a különböző számok különböző gyakorisággal fordulnak elő, és a feladat ezt a számsorozatot minél rövidebb bitsorozattal kódolni. A jelenlegi tömörítő programok ezt úgy oldják meg, hogy figyelembe veszik az egyes számok gyakoriságát az egész számsorozaton belül, valamint annak gyakoriságát az egész számsorozaton belül, hogy milyen számok milyen számok után fordulnak elő valószínűleg. Úgy tűnik viszont, hogy általában nem osztályozzák a számsorozat tagjait szintaktikai kategóriákba, és azt sem használják ki, ha egy szimbólum (vagyis a matematikai modell alapján szám) csak néhány területen belül fordul elő gyakran. Az utóbbi esetre Fekete Árpád ötlete egyszerű volt: csak soroljuk fel az összes szót (vagy számot, szimbólumot) a megjelenésük sorrendjében (esetleg egy kis hasznos háttérinformációval), és ezután, a kódolásra használt biteknek azt kell jelentenie, hogy milyen messzire fog előfordulni újra ugyanaz a szó (vagy szám, szimbólum).

És mégis!

Fekete Árpád a munkaerőpiaci helyzetének javítása érdekében jelenleg jobbnak látta a programozást, mint más prodzsekteket, ezért mégis elkezdte implementálni a tömörítő algoritmust. Ennek neve TomorIT lett, és a Google Code adott neki helyet, mert MIT licensszel volt megosztva, C++-ban íródott és GIT verziókövető rendszerrel volt karbantartva. Viszont a prodzsekt abba lett hagyva érdekesebb prodzsektekért, tehát a kódja közkincs lett és itt lett megosztva, hogy bárki folytathassa: tomorit.zip