Řazení slov na styl slovního fotbalu – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Řazení slov na styl slovního fotbalu – Python – Fórum – Programujte.comŘazení slov na styl slovního fotbalu – Python – Fórum – Programujte.com

 

Mikas
~ Anonymní uživatel
13 příspěvků
8. 11. 2021   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 147.230.227.–
gna
~ Anonymní uživatel
1851 příspěvků
9. 11. 2021   #2
-
0
-

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()
Nahlásit jako SPAM
IP: 213.211.51.–
Mikas0
Duch
10. 11. 2021   #3
-
0
-

#2 gna
jo chci s tím dělat to že dostanu seznam slov a následně mám zjistit zda je možné tato slova seřadit na způsob slovního fotbalu, tak aby to byl co nejrychlejší algoritmus Přičemž můžu dostat až 100 000 slov

Nahlásit jako SPAM
IP: 147.230.231.–
Mikas0
Duch
10. 11. 2021   #4
-
0
-

#2 gna
a tento slovní fotbal zajímá pouze jestli je první písmeno následujícího slova stejné jako poslední písmeno předchozího slova. tedy mě ve finále nezajímá co je to za slovo jelikož mě zajímá jen první a poslední písmeno od každého slova.

Nahlásit jako SPAM
IP: 147.230.231.–
gna
~ Anonymní uživatel
1851 příspěvků
11. 11. 2021   #5
-
0
-

Já v tom vidím cyklický graf a takové úlohy nejde řešit rychle. 100 000 slov nestihneš před vyhynutím lidstva.

Nejsou tam ještě nějaká "optimalizující" omezení?

Nahlásit jako SPAM
IP: 213.211.51.–
peter
~ Anonymní uživatel
3981 příspěvků
12. 11. 2021   #6
-
0
-

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"], ...],

Nahlásit jako SPAM
IP: 2001:718:2601:258:4d13:5eb4:e192:f6a2...–
peter
~ Anonymní uživatel
3981 příspěvků
12. 11. 2021   #7
-
0
-

#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 :)

Nahlásit jako SPAM
IP: 2001:718:2601:258:4d13:5eb4:e192:f6a2...–
JerryM0
Věrný člen
12. 11. 2021   #8
-
0
-

to co hledáš se menuje vícedimenzionální RedBlackTree struktura ... ale odhaduju že to je nad tvoje současné možnosti.... takže to nemá smysl řešit

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:31fb:7dfa:42a0:90f7...–
peter
~ Anonymní uživatel
3981 příspěvků
12. 11. 2021   #9
-
0
-

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

Nahlásit jako SPAM
IP: 2001:718:2601:258:4d13:5eb4:e192:f6a2...–
peter
~ Anonymní uživatel
3981 příspěvků
12. 11. 2021   #10
-
0
-

A taky se to neda pouzit pro 100.000 slov :)

Nahlásit jako SPAM
IP: 2001:718:2601:258:4d13:5eb4:e192:f6a2...–
JerryM0
Věrný člen
12. 11. 2021   #11
-
0
-

RBTree se dá napsat i v JavaScriptu to je fuk ... ale koukám že máš docela chaos v tom co děláš :)

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:31fb:7dfa:42a0:90f7...–
JerryM0
Věrný člen
12. 11. 2021   #12
-
0
-

jinak další možnost je samozřejmě tabulka 256x26 s odkazem na náhodný prvek do skupiny List<String> po p9smenech a ... z, A..Z atd.

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:31fb:7dfa:42a0:90f7...–
JerryM0
Věrný člen
12. 11. 2021   #13
-
0
-

*tabulka 256x256

*písmenech

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:31fb:7dfa:42a0:90f7...–
gna
~ Anonymní uživatel
1851 příspěvků
12. 11. 2021   #14
-
0
-

Jasně, způsob uložení těch slov je to, v čem je tady problém...

Nahlásit jako SPAM
IP: 213.211.51.–
JerryM0
Věrný člen
13. 11. 2021   #15
-
0
-

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 ? :)

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:9c4:b784:c9c5:e5cf...–
JerryM0
Věrný člen
13. 11. 2021   #16
-
0
-

samozřejmě před tim čůráním musíš vystrčit bimbase z gatí :) :) :) :)  to dá rozum :)

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:9c4:b784:c9c5:e5cf...–
gna
~ Anonymní uživatel
1851 příspěvků
13. 11. 2021   #17
-
0
-

#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.

Nahlásit jako SPAM
IP: 213.211.51.–
rené
~ Anonymní uživatel
9 příspěvků
4. 1. 2022   #18
-
0
-

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 :-)

Nahlásit jako SPAM
IP: 2a02:768:4533:61c2:ac3f:db43:36a7:cd4a...–
gna
~ Anonymní uživatel
1851 příspěvků
4. 1. 2022   #19
-
0
-

Takže nějaká forma grafu, kde jen mezi některými uzly budou spoje? To co tady v nějaké formě napsal úplně každý? A není to 100k kombinací, ale 100k slov, což je mrtěmegamoc kombinací.

Nahlásit jako SPAM
IP: 213.211.51.–
Mikas
~ Anonymní uživatel
13 příspěvků
5. 1. 2022   #20
-
0
-

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

Nahlásit jako SPAM
IP: 147.230.230.–
gna
~ Anonymní uživatel
1851 příspěvků
5. 1. 2022   #21
-
0
-

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íš.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

CSS styl — založil TomK65

Styl zápisu #include — založil survik1

Swing - styl prvků — založil fatalwir

Filtry - ošoupaný styl — založil PetrXXXL

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý