Svobodný citační manažer Zotero (Wikipedie, GitHub) byl vydán v nové major verzi 8. Přehled novinek v příspěvku na blogu.
Byla vydána verze 1.93.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Svobodný operační systém ReactOS (Wikipedie), jehož cílem je kompletní binární kompatibilita s aplikacemi a ovladači pro Windows, slaví 30. narozeniny.
Společnost Raspberry Pi má nově v nabídce flash disky Raspberry Pi Flash Drive: 128 GB za 30 dolarů a 256 GB za 55 dolarů.
Technologie Skip pro multiplatformní mobilní vývoj, která umožňuje vývojářům vytvářet iOS a Android aplikace z jediné Swift a SwiftUI kódové základny, se s vydáním verze 1.7 stala open source.
Na GitHubu byl zveřejněn algoritmus "Pro vás" sociální sítě 𝕏.
Byla vydána nová major verze 34.0.0 webového prohlížeče Pale Moon (Wikipedie) vycházejícího z Firefoxu. Přehled novinek v poznámkách k vydání.
Win8DE je desktopové prostředí pro Wayland, inspirované nechvalně proslulým uživatelským rozhraním Metro z Windows 8. Nabízí dlaždicové rozhraní s velkými tlačítky a jednoduchou navigací, optimalizované pro dotyková zařízení. Cílem projektu je přetvořit design operačního systému Windows 8 do funkčního a minimalistického rozhraní vhodného pro každodenní použití na Linuxu.
Laboratoře CZ.NIC vydaly Datovku 4.28.0 a Mobilní Datovku 2.6.0. Hlavní novinkou je ukládání rozpracovaných datových zpráv do konceptů. Datovka je svobodné multiplatformní aplikace pro přístup k datovým schránkám a k trvalému uchovávání datových zpráv v lokální databázi.
Unix Pipe Game je vzdělávací karetní hra zaměřená na děti a rodiče, která děti učí používat unixové příkazy prostřednictvím interaktivních úkolů. Klíčovým prvkem hry je využití symbolu | pro pipeline neboli 'rouru', který umožňuje propojit výstupy a vstupy jednotlivých unixových příkazů, v tomto případě vytištěných na kartičkách. Předpokládá se, že rodič má alespoň nějaké povědomí o unixových příkazech a jejich provazování pomocí |.
… více »
. Nejprve začnu tím, jak to bylo uděláno předtím (ve zkratce: hloupě) a pak popíšu, jak je to uděláno teď s využitím jedné pěkné datové struktury.
Oproti tomu nové řešení je strašně super. Celé je postavené na upravené datové struktuře Trie přidávající hashování. O tom, jak funguje trie psát nebudu, kdo to neví, ať to přečte. Standardní trii jsem se ale rozhodl trošičku optimalizovat, a to použitím hash tabulky pro první rozdílné písmeno za prefixem. V praxi rozdíl nebude, protože se zpracovává málo dat, ale chtěl jsem si to vyzkoušet
. Hlavně pokud by to mělo k něčemu být při zpracování většího množství dat, tak by se hash tabulka musela používat pro větší část prefixu (třeba tři písmena), protože projít abecedu je mžik. Každopádně už to tak je a funguje to.
Pro lepší ilustraci obrázek, co vznikne vložením „sníh“, „skoro jasno“, „skoro zataženo“, „déšť“ a „přeháňky“ do této datové struktury. První je na řadě hash tabulka pro počáteční písmena prefixů „s“, „d“, „p“. Protože déšť a přeháňky nemají společný prefix, jsou uloženy (kromě prvního písmena) do samostatných uzlů do kterých ukazuje záznam pro „d“, resp. „p“ z hash tabulky. Zajímavé jsou ale „skoro jasno“ a „skoro zataženo“. Protože se liší prvním písmenem za „skoro “, tak se vytvoří nová hash tabulka, která ukazuje na další část slova.
Co se týče použití v praxi, tak došlo k následujícím změnám – veškerý starý kód parseru jsem vyhodil, a:
Díky těmto změnám je teď snadné podporovat víceslovná spojení a navíc došlo k výraznému zrychlení. IIRC parser zabral ca dvě třetiny času zpracování předpovědi, teď to je tuším někde kolem 2%.
Tiskni
Sdílej:
V tomhle případě byl význam si vyzkoušet, jestli to jde.
Teď k mojí teorii, která tedy má smysl až když se udělá hash na delší část textu. Předpokládám, že hashováním na několika písmenech se hledání rychle posune do nižší úrovně bez nutnosti přímo porovnávat různé prefixy. Důsledkem by vlastně bylo i snížení hloubky stromu. Př.: když by se vkládalo „něco“, „někdo“ a „foo“ a hash se dělal ze tří písmen, tak by si člověk odpustil porovnávání s „ně“ a s „foo“ ale v tomhle případě by se rovnou skočilo na výsledek. Podle mého názoru (nemám to nijak matematicky podložené*) by to tedy mělo výhodu v podstatě O(1) vyhledávání jako v hash tabulce, ale s tím, že by bylo menší množství kolizí při potřebě několika krátkých tabulek.
Tady asi čtenáře napadne, proč jsem vlastně nepoužil rovnou hash tabulku. Důvod je takový, že by musela být poměrně rozsáhlá aby zachytila všechny možné tvary slov. Tak, jak to mám implementováno teď, se do trie často vkládá jen část slova (třeba „sněh“) přičemž se vrací výsledek už když ten začátek pasuje (tedy pokud nepasuje nějaký delší prefix), tj. postihne to slova jako „sněhem“, „sněhové“ atd. což už by se s hash tabulkou dělalo asi docela špatně.
PS: nevykat 
* píšu si do TODO, protože by mě to samotného zajímalo