Alábbi bináris fa sok elemet kezeljen, hogyan?
Az alábbi kódnál többezer elem esetén már a feltöltés sem működik, vagy végtelen ciklusba kerül.
Van valakinek olyan megvalósítása, mely nagy elemszám esetén is jól működik?
Akár Pascal akár C nyelven.
Statikusra ezt nem érdemes átírni? (a pointerezés miatt jelentősen lassulnak a műveletek, ezt más algoritmus esetén is tapasztaltam).
Itt található a kód:
Sztem először azt kéne megtanulnod, hogy mi az a bináris fa.
A "pointerezés" nem lassít, hanem gyorsít. Ami ebben a kódban lassít, az a print.
De, lassít a pointerezés.
Ez egy bináris keresőfa.
Ez, amit kivánsz, működik is.
Azt kell tudni, hogy az általad linkelt program nem bináris keresőfa, hanem, olyan program, amely bináris fákon - tipikusan keresőfákon - bizonyos műveleteket képes elvégezni.
Ami még fontos, hogy ezen műveletek egyike-másika nagy elemszám esetén igen költséges, hiszen olykor újjá kell építeni a fa jelentős részét. Maga a feltöltés is költségigényes folyamat lehet ha az elemszám tetemes, hiszen a bináris keresőfa sajátja, hogy az elemek bizonyos rendezettségben foglalnak helyet a struktúrában.
Nem néztem a kódot olyan behatóan, de meglehet, hogy minden új elem esetén restrukturálni kell a fát, ha a beillesztendő elem többihez való viszonya ezt megkivánja, és az pl. egy rendezetlen tömb esetén elég gyakran előfordulhat.
Azért írtam, hogy legelőbb a bináris fákat kéne megismerned, mert nekem úgy tűnik, a dolognak ezen, fentebb is hivatkozott természetével nem nagyon vagy tisztában.
Igen, elnézést.
Tudsz linkelni olyan példakódot (statikus és dinamikus megvalósításban), amely bináris keresőfa és nagy elemszám esetén is működne a keresés?
"Például több ezer elem esetén is működne."
Most kipróbáltam, tízezer elemmel, úgy hogy az elemeket is random generáltattam, azokból a keresőfát felépíttettem. Gyakorlatilag mélyen 1 sec. alatt végzett két elem kikeresésével és a teljes fa printjével.
Kipróbáltam 10 000 elemből 500-at kikerestetni.
Mindennel együtt azonnal visszakaptam a promptot. Ezt a keresést 50 elemre leszűkítettem, hogy ne szúrjak ki másokkal, íme:
9955 9956 9957 9959 9960 9961 9963 9964 9965 9967 9969 9970 9971 9972 9973 9974 9975 9976 9977 9981 9982 9983 9984 9985 9988 9989 9990 9992 9993 9994 9995 9997 )
--------------------------------
Elem:903 FALSE
Elem:758 TRUE
Elem:946 TRUE
Elem:723 FALSE
Elem:682 TRUE
Elem:270 TRUE
Elem:252 TRUE
Elem:741 TRUE
Elem:369 FALSE
Elem:49 TRUE
Elem:621 TRUE
Elem:272 TRUE
Elem:426 TRUE
Elem:470 FALSE
Elem:592 TRUE
Elem:386 TRUE
Elem:853 FALSE
Elem:538 TRUE
Elem:942 TRUE
Elem:551 FALSE
Elem:597 TRUE
Elem:274 FALSE
Elem:506 FALSE
Elem:150 TRUE
Elem:112 FALSE
Elem:699 FALSE
Elem:600 FALSE
Elem:990 FALSE
Elem:686 TRUE
Elem:665 FALSE
Elem:65 FALSE
Elem:789 TRUE
Elem:590 FALSE
Elem:412 FALSE
Elem:980 FALSE
Elem:95 TRUE
Elem:312 FALSE
Elem:40 TRUE
Elem:283 TRUE
Elem:265 FALSE
Elem:914 TRUE
Elem:823 TRUE
Elem:227 FALSE
Elem:910 TRUE
Elem:814 FALSE
Elem:620 TRUE
Elem:940 TRUE
Elem:281 FALSE
Elem:343 TRUE
Elem:244 FALSE
9989. elem: 4754 TRUE
9990. elem: 4519 TRUE
9991. elem: 300 TRUE
9992. elem: 13486 FALSE
9993. elem: 4420 TRUE
9994. elem: 17800 FALSE
9995. elem: 16906 TRUE
9996. elem: 12457 TRUE
9997. elem: 14369 FALSE
9998. elem: 3989 TRUE
9999. elem: 17003 TRUE
10000. elem: 6640 FALSE
30 000 element, 10 000 search
-------------------------------
running time: 125 mSec.
Ez alig több mint egy tized másodperc. Szóval, valamit te csinálsz rosszul.
Kapcsolódó 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!