Program milyen rendezéssel kezeljen fájlban lévő nagylétszámú rekordokat? (bővebben lent)
Elméletben foglalkoztat ez a téma: nagy létszámú rekordok esetén célszerű adatbázist használni, vagy bármilyen programozási nyelven, algoritmussal megoldható a feladat?
Ha létrehozásra kerülne például egy program által nagy számú rekordot tartalmazó fájl, milyen algoritmussal célszerű rendezni, hogy a rendezési sebresség ne vegyen el túl sok időt?
Például: az adatok: név, telefonszám. Tegyük fel, hogy telefonszám szerint kerül rendezésre.
Ilyenkor azt érdemes tenni, hogy minden törlésnél-módosításnál-beszúrásnál újrarendezzni az egész fájlt és keresni olyan algoritmust, amely rendezett adatokon gyors?
Rendezni úgy érdemes hogy például egy pár tízezer, rekordokból álló tömböt definiálni, majd ebbe olvasgatni az adatokat, míg meg nem telik, aztán kiírni stb, vagy egyesével olvasni/írni a fájlba a rekordokat?
Hazudni lehet, hogy te szoktál, én max. tévedek.
Arra válaszoltam, amit a kérdező felvetett, hogy milyen csekély, elhanyagolható időbeli nyereségre számíthat ha egy "jobb" algoritmust használ a buboréknál - ami közismerten a legrosszabb - akkor is, ha a rekordok elemszáma akár egymillió.
1000000 elemű tömb, nem rendezett tömbön az algoritmusok sebessége
buborékos: 1811.63 sec
beszúrásos: 1058.63 sec
selection sort: 909.26 sec
shell sort: 0.06 sec
counting sort: 0.01 sec
minimum kiválasztásos rendezés: 947.48 sec
gyors: 0.02 sec
Rendezett tömbön
buborékos: 0.00 sec
beszúrásos: 0.01 sec
selection sort: 998.04 sec
shell sort: 0.02 sec
gyors: 0.02 sec
"algoritmusok sebessége buborékos: 1811.63 sec"
A buborékrendezés egy lassú, gazdaságtalan algoritmus, de ez az általad mért idő még így is borzasztóan hosszú.
Sztem optimalizált buborékrendezéssel kellene próbálkoznod, mert az legalább nem megy végig újra a sorted elemeken. Ezzel a futásidő akár az eredeti egyharmadára, sőt, negyedére is redukálódhat.
Amúgy, az gondolom látszik, hogy az általad elkivánt elemszám eseteiben nem járna a rendezés semmiféle időhátránnyal, bármelyik algoritmust is választanád.
Rendezés során egyesével fájlba írni nem jó dolog, mert a file-ok írása, olvasása iszonyúan lassú művelet a memóriához képest. Azt mondjuk megteheted, hogy memória streamet hozol létre, amit úgy használhatsz, mint egy fájlt és ha végeztél, akkor a streamet kiíratod a háttértárra, fizikai fájlként, immár egyetlen lépésben.
Köszönöm a hozzászólást.
Az optimalizált buborékos rendezés algoritmusát hol találom meg, a Wikipédián?
Néztem több forrásból is nemrég, a Wikipédiát azt hiszem pont nem néztem akkor.
Itt egy forrás hozzá:
Még annyit, hogy ha normál prioritásszinten futtatod a szorteredet, akkor az csak a prociidő 50 %-át kapja meg, jó esetben. Szóval, ezzel is számolni kell.
További kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!