kombinatorika – algoritmus?

Kezdőlap Fórumok Programozás kombinatorika – algoritmus?

6 bejegyzés megtekintése - 11-16 / 16
  • Szerző
    Bejegyzés
  • #2061949
    uzsolt
    Felhasználó

      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…

      #2061950
      pointux
      Felhasználó

        „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”

        #2061951
        pointux
        Felhasználó

          Na, 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 ();
          #2061952
          tothaa
          Felhasználó

            Vizsla, 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…

            #2061953
            uzsolt
            Felhasználó

              Bocsá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ó…

              #1883442
              csaba
              Felhasználó

                Ez 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…

              6 bejegyzés megtekintése - 11-16 / 16
              • Be kell jelentkezni a hozzászóláshoz.