Ř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

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

Mikas
~ Anonymní uživatel
12 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
1561 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
1561 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
3735 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
3735 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
Super č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
3735 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
3735 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
Super č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
Super č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
Super č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
1561 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
Super č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
Super č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
1561 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.–
Zjistit počet nových příspěvků

Přidej příspěvek

×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, 4 hosté

Podobná vlákna

CSS styl — založil TomK65

Photoshop- styl úpravy — založil Marek

Styl zápisu #include — založil survik1

Swing - styl prvků — založil fatalwir

 

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