Pikkuapua

Mitenkä annetun merkkijono kaikki permutaatiot generoidaan? Haluaisin tallettaa muuttujiin kaikki kymmennumeroiset luvut, joissa eka numero ei ole nolla. Ilmeisesti merkkijonotaulukkoja käytetään, mutta miten kyseisen merkkijonon voi siten muuttaa 10-numeroiseksi intiksi tai longiksi?

Tai siis oikeastaa tarvitsen luupin, jossa muuttujaan tallennetaan kerralla yksi luku, mutta luuppi käy läpi kaikki permutaatiot. Näin muistia ei kulu tarpeettomasti.
2381
Äänestä

Muut lukivat myös

Vastaukset 2

Vanhimmat

Yksinkertaista ja tee homma ensin 2-numeroisena (ja ehkä myös 3-numeroisena), niin sen jälkeen 10-juttu pitäisi onnistua helposti.

Äänestä

Permutaatiossa halutaan järjestää kaikki joukon alkiot.

Jos sinulla on merkkijonossa esim "abc", siitä on mahdollista muodostaa seuraavat permutaatiot :

abc, acb, bac, bca, cab, cba

Jos tosiaan haluat tehdä funktion, joka palauttaisi kaikki permutaatiot vaikka esim. luvusta "1234567890", niin sinulla edessä pienoinen ongelma muistin suhteen. Jos kyse on tosiaan pelkistä luvuista voit vähentää muistin kulutusta tallentamalla kunkin permutaation tulokset suoraan long muuttujiin. Silti noita muuttujia tulee aika paljon .

Helpointa kai laskea ensin kokonaisalkiomäärä eli k! (10! = 3628800) ja sitten varata ensin niille kaikille riittävän suuri taulukko (3628800 x 4tavua = 14515200 = 14,5Mt). Riippuen missä koneessa työskentelet, saatat joutua paloittelemaan taulukon pienempiin osiin. Yleisesti ottaen kaikilla uudemmilla 32-bittisillä koneilla tuo pitäisi olla vielä suhteellisen helppoa. Jos haluat haastetta, tee sama 8-bittisellä koneella. ;)

Vaihtoehtoisesti voit tallentaa permutaatiot linkitettyyn listaan tai sitten molempien (taulukko/lista) tapojen yhdistelmään. Miten vaan tiedot tuntuisivat paremmin saatavilla niiden jatkokäsittelyä silmällä pitäen.

Luodessasi eri permutaatiota suosittelen karsimaan 0-alkuiset pois jo luontivaiheessa, koska siten säästyy muistia. Tällöin tarvittavan muistin määrä on vain k!-(k-1)!.

Ei se tuon kummempi pitäisi olla, jos ymmärsin kysymyksen oikein.

Äänestä

Kommentoi aloitusta


C-alkaja kirjoitti:

Mitenkä annetun merkkijono kaikki permutaatiot generoidaan? Haluaisin tallettaa muuttujiin kaikki kymmennumeroiset luvut, joissa eka numero ei ole nolla. Ilmeisesti merkkijonotaulukkoja käytetään, mutta miten kyseisen merkkijonon voi siten muuttaa 10-numeroiseksi intiksi tai longiksi?

Tai siis oikeastaa tarvitsen luupin, jossa muuttujaan tallennetaan kerralla yksi luku, mutta luuppi käy läpi kaikki permutaatiot. Näin muistia ei kulu tarpeettomasti.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu