Hogyan lehet egy két dimenziós tömb elemeit kitölteni a lehető összes módon 0-val,1-gyel és 2-vel?
Egy matekfeladathoz kell. Van egy megadott 2 dimenziós tömböm, arról el tudom már dönteni, hogy jó-e, vagy sem. le kéne generálni az összes két dimenziós tömböt, ami lehetséges.
Például:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
, vagy:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1
vagy:
0 1 0 0
0 2 0 0
0 1 0 0
0 0 1 0
Ez egy 4x4-es (icipici) méret esetén több, mint 43 millió különböző eset.
5x5 esetén már majdnem 850 milliárd eset.
Végignézed mindet egyesével?
Ok, 5x5 akkor nem kell, tehát csak 43 millió esetet kell végignézni.
Ha másodpercenként egyet megvizsgálsz és megállás nélkül csinálod alvás és evés nélkül, akkor 1 és negyed év alatt kész leszel.
#5 Édes istenkém, menj már innen melegebb éghajlatra, nem tudom, hogy a saját inkompetenciád, vagy a személyiséged késztet arra, hogy állandóan kötekedj, meg marhaságokat böfögj, de elég lesz.
A kérdésre válaszolva: A feladatot sokkal egyszerűbbé tesszük, ha rájövünk, hogy a kétdimanziós tömb igazából átírható egydimenziós tömbbé (tomb1[i][k] => tomb2[i*n + k], ahol n egy 'sor' hossza), és lényegében sorfolytonosan következnek egymás után az elemek. EZ azért jó, mert így máris nem azt kell kitalálni, hogy egy kétdimenziós tömbben hogyan hozol létre minden számvariációt, hanem már csak egy mezei tömbre kell ezt megtenni. A procedúra pedig igen egyszerű. Kezdetben van egy olyan sorozatod:
0000000000000000.
És ezt elkezdheted egyesével növelni.
1000000000000000,
2000000000000000,
0100000000000000,
1100000000000000,
és így tovább. Ez lényegében megegyezik azzal, hogy "számoljunk el 0-tól N-ig egyesével", csak tizes számrendszer helyett itt hármas számrendszerben kell ezt megtenni. Minden lépésben megnézed a legkisebb helyiértéken álló értéket, ha ott 2-nél kisebb szám áll, akkor hozzáadsz egyet. Ha pedig 2 áll rajta, akkor lenullázod azt a helyiértéket, és ugyanezt a lépést rekurzívan elvégzed a következő helyiértékkel. Mindez addig, amíg nem 'csordul túl' az aktuális helyiérték. Ez egy iteráció. Minden iterációval megkapod az egyik variációt. Addig folytatod ezt, amíg túl nem csordul az utolsó helyiérték is (azaz el nem éred a 2222222222222222-es számsort). Így érthető? :D
Kedves #4-es Pistike!
És mesélj még, az, hogy 1 dimenzióra vetíted a 2D-s tömböt mitől is csökken a lehetséges 43 millió variáció?
Mitől is lesz ez hasznosabb?
Aztán ha elgondolkoztál gyere vissza, ha sikerült megértened a feladatot.
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!