Dobrý den
Mám takový problém byl by tu někdo, kdo by poradil algoritmus pro nejrychlejší seřazení slov na stylu slovního fotbalu? Mám soubor se 100 slovy délkou od 2-1000 znaků a furt nemůžu přijít na nejrychlejší řešení. Zatím to je tak že vezmu všechna slova a následně procházím zbylá a koukám jestli by se daly přidat před nebo za text(již seřazená slova). Jde mi jen o to zda jdou tato slova seřadit nebo ne.
Předem děkuji za odpovědi.
Fórum › Python
Řazení slov na styl slovního fotbalu
Podle toho, co s tím chceš dělat. Můžeš si to třeba rozhodit do mapy:
slovnik = {
"ak": ["akat", "akvarium", ...],
"ba": ["babicka", "babovka", ...],
...
}
import random
import urllib.request
def main():
with urllib.request.urlopen("https://pastebin.com/raw/7uPetKWh") as f:
slova = f.read().decode().splitlines()
# >>>
slovnik = {}
for slovo in slova:
slovnik.setdefault(slovo[:2], []).append(slovo)
# <<<
def dalsi(slovo=None):
key = random.choice(list(slovnik.keys())) if not slovo else slovo[-2:]
moznosti = slovnik.get(key)
return moznosti.pop() if moznosti else None
for _ in range(10):
slovo = dalsi()
while slovo:
print(slovo, end=" ")
slovo = dalsi(slovo)
print("<konec>")
if __name__ == "__main__":
main()
Ja myslim, ze gna ti hned prvni reakci rekl vse, co potrebujes vedet a tys to doresil v prispevku #4, ze te zajima jen prvni a posledni pismeno.
- Vemes seznam slov.
- Roztridis je do skupin/slovniku prvni pismeno. "s": ["Strom", "Sanitka", ...],
- A pak pouzivas agoritmus vsech kombinaci. Vyhledavas ve slovniku skupinu zacinajici poslednim pismenem slova. A vyzkousis vsechna slova.
Bohuzel, protoze pouzivas algoritmus vsech moznosti, hledani nejkratsi cesty, tak na 100.000 slov muzes zapomenout :)
Ale, mozna by se to dalo jeste urychlis, ze si do toho slovniku ulozis skupinku [slovo, posledni pismenko], at to nemusis stale zjistovat
"s": [ ["Strom","m"], ["Sanitka","a"], ...],
#5 - "100 000 slov nestihneš před vyhynutím lidstva."
Ve skutecnosti tato veta radu let uz neplati. Existuji viceprocesorova jadra a superpocitace. Pokud se kazde z miliardy jader zameri na jednu cestu... A ted nove existuji kvantove procesory, ktere se zameruji prave na takove ulohy. Je velmi pravdepodobne, ze lidstno par let jeste nevyhyne a dokaze postavit pocitace, ktere tu ulohu vyresi behem par sekund :)
JerryM :) Ja treba vyhledavani nejkratsi trasy provadim pres 1 dimenzionalni pole. Cili, cely strom zapisuji velice jednoduse. Ale, mam jine zadani, takze se to neda pouzit presne na tohle a mam to v javascriptu. Takze, bych ho neplasil s nejakymi terminologiemi.
https://mlich.zam.slu.cz/js-ff/ff4b.htm
mužeš to udělat i jako hashovací tabulku na tisíc způsobů... přímé hashování, perfektní hashování atd .. atd. ..
jak říkám tohle je zatím nad tvoje schopnosti .. jinak by ses neptal ale udělal by si to .. .chápeš jo ? když se chceš jít vyčůrat tak taky nevoláš o pomoc ale zajdeš nahajzlík a rozepneš si poklopec a vyčůráš se ... chápeš jo ? :)
#16 JerryM
Tady jde o to, ře se řešení dá najít jen vyzkoušením všech navazujících kombinací (v nejhorším případě) bez možnosti optimalizace. To v jaké struktuře bude mít ta slova je úplně šumák.
Tak si zastrč bimbase a běž zazimovat zahradu nebo něco jiného užitečného.
Jenom 100.000 ? Proč by to mělo trvat celý život? Zrovna dělám věci kde mám například 370.000.000 vět :-) s mnohem složitějšími kombinacemi než je tohle.
Protože téma není již aktuální tak se nebudu dlouze rozepisovat. Jen pro ostatní že 100.000 kombinací se da zvládnou jen za pomocí for, in, is, not, while, if a není třeba vymýšlet složitosti.
Faktem je že i mi trvalo asi 11 měsíců než jsem přišel na to, že žádný složitý kód nepotřebuji ale to je jíná pohádka...
Důležité je se zamyslet nad problémem proč je těch 100.000 kombinací složité a proč být vůbec nemusí.
Vždyť abeceda má jen pár písmen a například po písmenu "z" nelze napsat písmeno "z" nebo "g" nebo "w"
a každé písmeno má svá pravidla tím se hned možnosti a počet kombinací scvrkne :-)
Tady jde o to najít v podstatě nejrychlejší algoritmus pro hledání nejdelší cesty grafem, tedy takové ve které se každý vrchol (slovo) vyskytuje právě jednou s návazností jako ve slovním fotbale tedy poslední písmeno aktuálního slova je schodné s prvním písmenem slova následujícího.
např.: jana evangelium ahoj anastazie
rešení: ahoj jana anastazie evangelium
akorát na vstupu můžeš mít mnohem více slov my jsme měli 100k slov která se nadala takto sestavit a program my běžel do aleluja
Pokud je to reálný ukol z nějakého cvičeni, tak se dá předpokládat, že to teda asi bude řešitelné v rozumném čase i bez účasti na tajném čínském sympóziu o algoritmech minulý týden.
Možná česká slova opravdu mají takové parametry, že to nebude taková hrůzna, nebo je ten seznam pečlivě vybraný, nebo něco.
Zkus pogooglit a opsat nějaký z existujících algoritmů a uvidíš.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Výpis vět s počtem slov větším než je průměr slov ve větě — založil alex
Styl zápisu #include — založil survik1
Swing - styl prvků — založil fatalwir
Filtry - ošoupaný styl — založil PetrXXXL
Moderátoři diskuze