Hogyan tömöríteni egy rendezett egyedülálló egész ogre

  • PHP
  • matematika
  • keresési technológia
  • algoritmusok

Web alkalmazás összehasonlítja páronként db pozitív egész szám.

Minden készlet tartalmaz magában ismétli, bármely számot már nem 210 Mill. (28 bit).

A készlet lehet 1-5 Mill.


Összehasonlítva a A és B halmaz kell, hogy egy sor „egyedi A”, „B az egyedülálló” és a „közös mag”. Különösen, csak válaszoljon a kérdésekre: „Van egy meghatározott számú S N?»


Végrehajtás, sajnos, a PHP és miközben a megosztott tárhely. Sietve végrehajtott terhelés tárhely MySQL: minden meghatározott ideiglenes tábla egyetlen oszlop index. A legtöbb esetben meghaladja a méret a táblázat, amely bekerül a motor = Memória, és a lemezen táblák egyáltalán nem gyors, de működik.


Hogyan lehet hatékonyan maradjon az összehasonlítandó két könnyedén és gyorsan végre, elfoglal egy kis helyigény, a memória?


Felmerült, hogy rögzítse az egyes készlet bitmaszk hossza 2 ^ 28 bit (32Mb). A 210 millió bit mindössze 5 millió darabot, a többi 0: tudják rögzíteni az egymást követő nullák, például. Nagyon hasonlít a motort. Mondj el mindent, kivéve engem, egy jól ismert algoritmus hatékony tömörítési bináris adatok egy adott esetben „sok nullát egy sorban?”


Pro Huffman kódolás olvasni úgy tűnik, hogy hatástalan a keresési mindegyik 5 Mill. A második számsor belül az első.

nincs 19MB. Különösen a PHP memória szükséges kétszer annyi. Most a „fej”, és tartsa - az adatbázisban, indexelt oszlop egy 32-bites egész. Ott össze. A egyediségét az adott helyzet hiányában az ismétlődések, unprincipledness rend és ismert tartomány. E három, az adatokat szeretné szorítani atski hatékony tömörítési, a sebesség és a kis kívánt memóriát.

Tömöríteni sorozata nulla bitet kell egy címke, amely nem haladja az adatokat, és a szám, majd - ezt a számot. Tegyük fel ezeket a számokat, akkor van egy fix méretű 32 bites - akkor lesz szükség az azonos ötmillió 32 bites egész hivatkozni a tömörített rész. Akkor talán valahogy torzítják és használata változó hosszúságú, de ez még mindig megnehezítik a kódot, és ez már nehéz narisovyvaetsya. Válogatni a tömb tárolható egy egyszerű fájlt, és olvassa el a részek (bár, hogy töltse ki ezt tömb nehezebb lesz). By the way, nem csak a száma 32-bit, akkor a felső bitek szolgáltatás információk - például, hogy hozzon létre egy egységes tömb, és a felső bitek megjegyezni, hogy mi különbözteti meg ezt a számot jelenti.