Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím, potřebuji poradit s tímto příkladem:
Máme dánu posloupnost p1 racionálních čísel, přičemž tato posloupnost má např. 1000 členů.
Posloupnost p2 racionálních čísel má méně členů než p1 - např. 10
Úkolem algoritmu je vypsat části z posloupnosti p1 co nejvíce odpovídající p2 a seřadit je podle relevance.
Mám sice představu jak by to mohlo fungovat, ale nemám tušení jak to naprogramovat v PHP (na PHP netrvám, ale je to priorita).
Budu rád za každou odpověď, nejsem matematik a programuji teprve rok.
Offline
↑ deFermat:
Ahoj, co znamená "co nejvíce odpovídající"? Děkuji.
Offline
↑ check_drummer:
Znamená to co nejmenší rozdíl mezi jednotlivými členy hledané posloupnosti s nalezené části p1.
Algoritmus by měl najít několik možností a seřadit je podle relevance tzn. od nejmenšího rozdílu mezi posloupnostmi.
Offline
↑ deFermat:
Ani to není přesné - těch rozdílů tam je více - takže co nejmenší součet těchto rozdílů? Nebo co nejmenší součet druhých mocnin těchto rozdílů?...
Offline
↑ check_drummer:
Omlouvám se za nepřesné vyjadřování, myslel jsem co nejmenší součet druhých mocnin rozdílů.
Offline
↑ deFermat:
Zatím jsem neměl čas se nad tím zamyslet, ale buď by možná mohlo pomoct tzv. dynamické programování a nebo je možné, že úloha je NP úplná... Zkusím se nad tím v příštích dnesch zamyslet. Na druhou stranu to vypadá jako úloha z praxe a tudíž by nějaké algoritmy na její řešení známy být mohly...
Offline
↑ check_drummer:
Asi by pomohlo popsat příklad přímo v praxi:
Týká se to predikce ceny kurzů, akcií, burzovních indexů atd., při předpokladu že se cena (hodnota) opakuje v určitých cyklech (nevíme jak dlouhých a jak dynamických), je to čistě experimentální a je to jen jeden z modelů.
Takže si představme graf kurzu nějaké akcie a můžeme si všimnout podobných "struktur" kurzu na různých místech (v různých časech, obdobích), přičemž vývoj před a především po takovém cyklu je podobný.
Je jasné, že tyto opakující se části jsou různě dlouhé (různý počet prvků hledané posloupnosti).
Takže úkolem algoritmu je vzít aktuální kurz resp. třeba 10 dní nebo 10 minut z aktuálního kurzu a srovnat je s minulostí. Mělo by se to srovnávat tak, že se vezme hledaná posloupnost a srovná se postupně s celou historií s kroky odpovídající dílku hledané posloupnosti takže třeba den po dni nebo minuta po minutě tzn. v historii se vždy budeme "posouvat" o tento jeden dílek. Při každém srovnání vypočítáme rozdílnost posloupností (zatím nevím jaký by byl nejlepší způsob) a tento rozdíl někam uložíme i s pořadovými čísly části v posloupnosti p1, abychom ji pak mohli jednoduše načíst.
Až se hledaná posloupnost srovná s celou p1, vypíšeme všechny nalezené části p1 a seřadíme je dle relevance tj. co nejmenší rozdíl.
A to je celé, problém je, že nevím jak to naprogramovat.
PS: Děkuji za snahu
Offline
↑ deFermat:
Aha, takže ta menší posloupnost není v té větší nesouvisle. Tak to je ale jednoduchá úloha na programování. Co ti na tom není jasné?
Offline