Kezdőlap › Fórumok › Programozás › kombinatorika – algoritmus?
- This topic has 15 hozzászólás, 8 résztvevő, and was last updated 19 years, 5 months telt el by
uzsolt.
-
SzerzőBejegyzés
-
2006-06-03-08:20 #2061949
Nem kezd el ez egy kicsit bonyolódni? Mi a francnak kell kiszámolni, hogy mennyi a lehetséges kombinációk száma? Elég módszeresen végigmenni, nem kell tudni, hogy hányat kell nézni. Amikor tanuljuk ezt suliban, akkor se úgy kezdjük, hogy akkor a faktoriális, hanem 2-3-4 elemre felírjuk az összeset rendszerben. A számítógépnek nem kell tudnia, hogy hányszor görcsöljön, fõleg nagyobb számoknál (túlcsordulások miatt).
A rekurziót pedig egy egyszerû verem-szerkezettel ki lehet váltani, és tényleg csak int -eket tároljunk, ne az egész elemsort egymilliószor.Ha majd meglesz az államvizsgám és jobban belemélyedek c-be, akkor majd megírom, ha nagyon kell, és két hét múlva is jó lesz…
2006-06-03-08:43 #2061950„Elég módszeresen végigmenni, nem kell tudni, hogy hányat kell nézni.”
Végül is az is jó, ha a végén egy ugyanolyat találaz, mint az elsõ ezt aláírom. (Csak akkor azt kell eltárolni egy „statikus” változóban.) Persze ezt azért választottam, hogy, ha valaki ezt az értéket tudni akarja, de tényleg elhagyható.„A számítógépnek nem kell tudnia, hogy hányszor görcsöljön, fõleg nagyobb számoknál (túlcsordulások miatt).
A rekurziót pedig egy egyszerû verem-szerkezettel ki lehet váltani”2006-06-03-16:45 #2061951Na, akkor összedobtam egy operátorosat…immáron elemek címei sorrendjének az összehasonlításával állapítja meg, hogy kész van-e.
A használata igen egyszerû:TYPE típusú elemeket tartalmazó (tartalmazni fogó) objektum létrehozása: wrote:Permutation p;TYPE típusú ELEM hozzáadása: wrote:p += ELEM;A következõ KOMBINACIO lekérdezése (ha már nincs több, akkor üres lista): wrote:std::list KOMBINACIO = (*p);A következõ KOMBINACIO elõállítása: wrote:++ p;Az elemek SZAMának lekérdezése: wrote:size_t SZAM = (*p).size ();2006-06-03-18:17 #2061952Vizsla, ez már tényleg kész header; köszi a fáradozásodat. – most boncolgatom, hogy jól megértsem…
A kettesével cserélgetés mentén írok most azért programocskát… Erre nehéz általánosítani…
2006-06-14-14:06 #2061953Bocsánat az eltûnésért, akkor gyorsan így utólag reagálnék:
– rekurzív fgv-ek átírása veremmel: igen, sok ilyet csináltam, tudom, hogy sokkal átláthatatlanabb a ciklus meg a veremmel való játszadozás miatt. Amikor tanultunk ezt még matematikuson algoritmusokból, nemigen értettem, ezért néhány hétig ilyeneket írogattam át: Hanoi tornyai, Fibonacci (dinamikus progr. meg a gyök ötös képlet nélkül), faktoriális (tudom, for ciklussal egyszerûbb, de meg akartam érteni az elvet, ezért minden, ami rekurzív és eszembe jutott, megcsináltam).– nem tudom, hogy el kell-e tárolni a permutációkat, ha csak ki kell írni, akkor a memóriahasználat nagyon lecsökken.
– helyes bejárás: még mindig nem értem, miért kell mindig két elemet felcserélni (persze így is lehet, de én magát az algoritmust nem látom). Hogyan szoktuk összeszámolni, hogy hányféle lehetõség van? Elsõ helyre n, másodikra n-1, harmadikra n-2, stb…
Ez alapján az algoritmus „elve”: valamilyen módon kapok elemeket egy tömbben (hogyan, az szerintem nem lényeg), kinézem az elsõt, azt kiírom, majd a maradékkal rekurzívan meghívodok. Utána a másodikat, maradékkal rekurzió…2009-12-04-19:58 #1883442Ez nem kifejezetten Linux probléma, inkább programozás…
Mondjuk ismétlés nélküli permutáció? – Pl.: van 5 név egy tömbben és állítsuk elõ a nevek összes lehetséges sorrendjét…
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.

legutóbbi hsz