Forum » Programiranje » Kako do algoritma
Kako do algoritma
enigma ::
Naloga:
Program sprejme 16 bitno število in izračuna 25 mestni rezultat.
Kako najti algoritem ob znanih parih (input,output).
Algoritem mora biti tudi inverzen, saj sicer nima smisla.
Na prvi pogled je enostaven, kajti sprememba vhoda za en bit, spremeni zgolj del rezultata.
Kako se lotit problema?
Program sprejme 16 bitno število in izračuna 25 mestni rezultat.
Kako najti algoritem ob znanih parih (input,output).
Algoritem mora biti tudi inverzen, saj sicer nima smisla.
Na prvi pogled je enostaven, kajti sprememba vhoda za en bit, spremeni zgolj del rezultata.
Kako se lotit problema?
Thomas ::
Poznam rešitev.
Povej čisto konkretno, kaj zaen problem rešuješ.
Povej čisto konkretno, kaj zaen problem rešuješ.
Man muss immer generalisieren - Carl Jacobi
enigma ::
Ni ravno programersko vprašanje, a ne vem, kaj bi ga drugam postavil.
Imam pare (input,output) zanima me kako odkriti neznani algoritem.
Input lahko recimo izbiram po želji
PS; Imaš zasebno sporočilo.
Imam pare (input,output) zanima me kako odkriti neznani algoritem.
Input lahko recimo izbiram po želji
PS; Imaš zasebno sporočilo.
enigma ::
Rajši ne bi.
Začel sem s primerjavo posameznih bitov vhoda in iskal relacije z rezultatom,
ki je alfanumerični ~35 različnih znakov.
Naprimer, če sta prvi in deseti bit 1 je prvo mesto rezultata A,
prvi=0, deseti=1 potem B,
....
Par mest rezultata bi šlo na tak način.
Potem
Nekatera mesta rezultata lahko logično povežem z vhodom, če vhodu prištejem konstanto.
Ampak nekaj je jih je popolnoma naključnih ???
Algoritem je odvisen samo od vhodnega podatka (isti vhod, da vedno isti izhod)
Da bi preskusil vse možnosti ni mogoče, ker moram ročno vnašat.
Sem se lotil vsaj približno pravilno?
Obstaja kakšen software za moje probleme?
Začel sem s primerjavo posameznih bitov vhoda in iskal relacije z rezultatom,
ki je alfanumerični ~35 različnih znakov.
Naprimer, če sta prvi in deseti bit 1 je prvo mesto rezultata A,
prvi=0, deseti=1 potem B,
....
Par mest rezultata bi šlo na tak način.
Potem
Nekatera mesta rezultata lahko logično povežem z vhodom, če vhodu prištejem konstanto.
Ampak nekaj je jih je popolnoma naključnih ???
Algoritem je odvisen samo od vhodnega podatka (isti vhod, da vedno isti izhod)
Da bi preskusil vse možnosti ni mogoče, ker moram ročno vnašat.
Sem se lotil vsaj približno pravilno?
Obstaja kakšen software za moje probleme?
nicnevem ::
V splošnem software za izračun *najkrajših* takšnih programov, ki bi preslikali nek vhod na izhod, niti ni mogoč, ker je problem neizračunljiv. Kar pa seveda ne pomeni, da ne moremo najti nekega
relativno kratkega in elegantnega algoritma za tvojo preslikavo.
To je namreč tisto, kar ljudje (najočitneje pa znanstveniki) počenjamo velik del našega časa - na voljo imamo neke informacije, v katerih poskušamo najti nek vzorec (=algoritem), ki bi nam *pojasnil* te podatke. Sprva je ta algoritem velik in okoren, vendar ga naša inteligenca optimizira tako da sčasoma postane primerno kratek. S tem ko postane kratek je v njem "ujeta" struktura teh podatkov (ker sicer ga ne bi morali tako zelo skrajšati) in posledično ta algoritem postane tudi dober napovedovalec prihodnjih podatkov, ki jih dobimo iz domene iz katere so bili vzeti tisti prvi v katerih smo iskali vzorec.
Ok, toliko s filozofskega stališča. Kako bi se pa praktično lotil tega problema?
Ena možnost je da si, tako kot so to počeli veliki možje znanosti, razbijaš glavo ob iskanju vzorcev v teh tvojih parih in sčasoma boš verjetno uspel proizvesti nek relativno eleganten algoritem.
Druga možnost (tista, ki jo ima IMO Thomas v mislih) je pa ta, da uporabiš Thomasov odlični program Critticall, v njegovem jeziku napišeš nek preprost algoritem, ki ti bo preslikal vhod, ki ga imaš na voljo v izhod (npr. Če je na vhodu X naj bo na izhodu A, Če je na vhodu Y naj bo na izhodu B itd.). Nato pa uporabiš optimizacijsko moč Critticalla in je usmeriš v iskanje čim krajšega algoritma, ki bo sproduciral enak rezultat kot ga sproducira tisti "če X potem A".
Domača stran Critticalla je http://critticall.com/
Zdownloadaj in se poigraj. Ali pa prosi Thomasa, da se poigra namesto tebe. :)
Upam, da tole vsaj malo pomaga. Za kaj več.. trenutno res nimam časa.
relativno kratkega in elegantnega algoritma za tvojo preslikavo.
To je namreč tisto, kar ljudje (najočitneje pa znanstveniki) počenjamo velik del našega časa - na voljo imamo neke informacije, v katerih poskušamo najti nek vzorec (=algoritem), ki bi nam *pojasnil* te podatke. Sprva je ta algoritem velik in okoren, vendar ga naša inteligenca optimizira tako da sčasoma postane primerno kratek. S tem ko postane kratek je v njem "ujeta" struktura teh podatkov (ker sicer ga ne bi morali tako zelo skrajšati) in posledično ta algoritem postane tudi dober napovedovalec prihodnjih podatkov, ki jih dobimo iz domene iz katere so bili vzeti tisti prvi v katerih smo iskali vzorec.
Ok, toliko s filozofskega stališča. Kako bi se pa praktično lotil tega problema?
Ena možnost je da si, tako kot so to počeli veliki možje znanosti, razbijaš glavo ob iskanju vzorcev v teh tvojih parih in sčasoma boš verjetno uspel proizvesti nek relativno eleganten algoritem.
Druga možnost (tista, ki jo ima IMO Thomas v mislih) je pa ta, da uporabiš Thomasov odlični program Critticall, v njegovem jeziku napišeš nek preprost algoritem, ki ti bo preslikal vhod, ki ga imaš na voljo v izhod (npr. Če je na vhodu X naj bo na izhodu A, Če je na vhodu Y naj bo na izhodu B itd.). Nato pa uporabiš optimizacijsko moč Critticalla in je usmeriš v iskanje čim krajšega algoritma, ki bo sproduciral enak rezultat kot ga sproducira tisti "če X potem A".
Domača stran Critticalla je http://critticall.com/
Zdownloadaj in se poigraj. Ali pa prosi Thomasa, da se poigra namesto tebe. :)
Upam, da tole vsaj malo pomaga. Za kaj več.. trenutno res nimam časa.
Jean-Paul ::
Poglej, s takšnimi problemi se ukvarjata (vsaj dve) znanstveni področji, ki se jima reče strojno učenje (ang. machine learning) in razpoznavanje vzorcev (ang. pattern recognition). Zaenkrat še ni bilo razvite (delujoče) rešitve, ki bi dala optimalne rezultate za vse možne probleme, ampak je izmed velikega števila predlaganih metod treba poiskati tisto, ki je najbolj naravna za dan problem (primeri bolj znanih metod so odločitvena drevesa, nevronske mreže, grafični modeli, SVM, ...). Vsaka ima svoje prednosti kot tudi slabosti.
Seveda pa je možno, da se za rešitev tvojega problema da uporabiti tudi kako manj splošno (beri: hevristično) pot.
P.S. Javi, kako si rešil problem, ko ga boš ;-)
Seveda pa je možno, da se za rešitev tvojega problema da uporabiti tudi kako manj splošno (beri: hevristično) pot.
P.S. Javi, kako si rešil problem, ko ga boš ;-)
enigma ::
Hvala za vse nasvete!
Bom pogledal tale Critticall in potem kontaktiral Thomasa
Kot kaže mi bo primanjkovalo predvsem časa
Kaj pa kakšna uporabna literatura na to temo?
Bom pogledal tale Critticall in potem kontaktiral Thomasa
Kot kaže mi bo primanjkovalo predvsem časa
Kaj pa kakšna uporabna literatura na to temo?
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Evolutionary computation a.k.a Digitalna evolucija (strani: 1 2 3 )Oddelek: Znanost in tehnologija | 18180 (16028) | Double_J |
» | Digitalna evolucija (strani: 1 2 3 4 … 26 27 28 29 )Oddelek: Znanost in tehnologija | 75513 (25682) | pietro |
» | It means business (strani: 1 2 3 4 5 6 7 8 )Oddelek: Znanost in tehnologija | 28275 (14274) | Thomas |
» | Generatorji praštevilOddelek: Znanost in tehnologija | 3828 (2732) | Phil |
» | kako definirtati prasteviloOddelek: Programiranje | 3784 (3589) | ooux |