Kezdőoldal » Számítástechnika » Programozás » Alábbi bináris fa sok elemet...

Alábbi bináris fa sok elemet kezeljen, hogyan?

Figyelt kérdés

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:

[link]



2021. febr. 5. 15:08
1 2
 1/11 anonim ***** válasza:

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.

2021. febr. 5. 16:38
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:

De, lassít a pointerezés.

Ez egy bináris keresőfa.

2021. febr. 5. 17:05
 3/11 anonim ***** válasza:
Jó, akkor inkább azt írd le, hogy mit szeretnél, mi a célod?
2021. febr. 5. 17:34
Hasznos számodra ez a válasz?
 4/11 A kérdező kommentje:
Szeretném nagy számú elemmel feltölteni és azt szeretném, ha minden elem esetén működne a keresés a fában. Például több ezer elem esetén is működne.
2021. febr. 5. 18:07
 5/11 anonim ***** válasza:

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.

2021. febr. 5. 18:21
Hasznos számodra ez a válasz?
 6/11 A kérdező kommentje:

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?

2021. febr. 5. 18:48
 7/11 anonim ***** válasza:

"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.

2021. febr. 5. 18:49
Hasznos számodra ez a válasz?
 8/11 anonim ***** válasza:

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

2021. febr. 5. 19:00
Hasznos számodra ez a válasz?
 9/11 anonim ***** válasza:

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.

2021. febr. 6. 01:16
Hasznos számodra ez a válasz?
 10/11 A kérdező kommentje:
Több százezer elemmel próbáltam és az "integer"-t "longint"-re cseréltem.
2021. febr. 6. 06:33
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!