Good Will Hunting scene with complex problem at MIT

Rozdíl mezi algoritmy a heuristikou

Podívejme se na základní strukturu tvorby algoritmu prostřednictvím několika zajímavých problémů a jejich jemných aspektů

Motivace

V průběhu let jsem si uvědomil, že informatika není o „počítači“ nebo „programování“. V této pasti jsme uvězněni, protože jsme zvyklí na mnoho běžně používaných slov „počítač“ a „programování“. Informatika - studium problémů. Vzhledem k problému je cílem počítačového vědce vyvinout algoritmus, seznam podrobných kroků, který by řešil případné problémy. Algoritmy jsou omezené procesy a pokud budou dodrženy, problém vyřešíme. Algoritmy jsou opravdu řešení, až na několik výjimek, jako všechno ostatní na světě. Počítače a programování jsou jen nástroje, jak toho dosáhnout.

Jakmile jsem byl přesvědčen, že „informatika je učení algoritmů“, mohl jsem ji rychle spojit s matematikou. Ve skutečnosti jsou to více než dvojčata. Krása, kterou můžete nyní jemně přesunout z jedné disciplíny do druhé. Stručně řečeno, pokud řeknu, že matematika je založena na informatice a že algoritmy jsou dalším způsobem reprezentace matematiky, nedělám chybu. Je to hudba mysli.

Je to řešení problémů, intelektuálně zvládnutí a krásné - to je pro mě impuls k zahájení výukových algoritmů. Určitě ano. Dovolte mi uzavřít tuto část dvěma citacemi, které poskytují dobrý základ pro výzkum a nepochybně jsou zdrojem myšlenky.

Algoritmus musí být důvěryhodný. - Donald Knut (matematik a počítačový vědec)
John von Neumann
Pokud lidé nevěří, že matematika je jednoduchá, je to proto, že nechápou, jak složitý je život. - John von Neumann (matematika, fyzika, statistika, ekonomie a informatika)

Úvod

Začněme s problémem. Algoritmický problém známý jako třídění je definován následovně.

Rozlišování mezi problémem a příkladem problému je zásadní. V tomto případě může jít například o soubor jmen jako {Suvro, Bhavna, Jane, Mike, Ram, Richa} nebo seznam čísel jako {7, 12, 11, 101, 45}. Algoritmus „Seřadit“ je však běžným problémem, takže potřebujete společné řešení, které akceptuje jakékoli instance přístupu a poskytne vám požadované výsledky. Existují různé algoritmy pro řešení regulačního problému, z nichž jeden se nazývá „Upravit“.

Inertstion Seřadit animovaný tok

Přidat seznam je metoda třídění, která začíná jednou položkou (jednoduše vytvořením seznamu) a poté přidáním zbývajících položek do seznamu objednávek. Podívejte se na zastoupení vlevo.

Python implementuje Intstion Sort takto:

Vnitřní proces řazení vložení

Vždy hledáme algoritmy, které jsou přesné, efektivní a snadno implementovatelné. V tomto úvodu se zaměříme pouze na přesnost algoritmů.

Správné algoritmy jsou často opatřeny důkazem správnosti, což znamená, že každý příklad problému, jak jsme viděli ve výše uvedeném příkladu, by měl přinést požadovaný výsledek. Než budeme pokračovat, ukážeme si, proč to není nikdy správné, a obvykle ne, proč je to „zřejmé“.

Je můj algoritmus jasný nebo správný?

Zvažte problém, který se často vyskytuje ve výrobních, dopravních a testovacích programech. Předpokládejme, že máte robota schopného pájení. Nyní chcete pájet elektronickou kartu, která se skládá z čipu a dalších částí, které je třeba připojit k desce. Zjevnou otázkou tedy je, jak robot může chodit po desce a vykonávat svou funkci. To by mělo být provedeno efektivně, protože existuje mnoho desek, které je třeba vyrobit v daném časovém období, a každá deska má mnoho takových pájecích míst.

Oficiální popis problému vypadá takto a my musíme naprogramovat rameno robota.

Problém: Optimalizace typu robota

Úvod: S 'n' Sbírka bodů na rovině

Výsledek: Jaký je nejkratší typ cyklu k návštěvě každého bodu v sadě C?

Nabídka-1: Blízké sousedství je heuristické

Asi nejdůležitější myšlenkou je heuristika nejbližšího souseda. Z nějakého náhodného bodu p0 jdeme k nejbližšímu sousedovi p1. Počínaje P1 jdeme k jeho nejbližšímu nerozpoznanému sousedovi (takže p0 není považován za kandidáta). Opakujeme všechny body do jedné návštěvy a pak se vraťte na náš výchozí bod p0, abychom dokončili prohlídku.

Hlavní myšlenkou je tedy navštívit blízká místa před návštěvou velkých vzdáleností, aby se zkrátila doba cestování. Funguje to velmi dobře na obrázku 1 výše a není také příliš malý, ale je moudré podívat se na každou dvojici bodů (pi, pj) dvakrát, při přidávání pj k druhům přidat pí a druhý. Bohužel tento algoritmus NENÍ VŠECHNY.

Algoritmus sice najde typ, ale neznamená to ani nejkratší typ. Podívejte se na situaci, kdy všechny myšlenky leží podél čáry, viz obrázek 2. Pokud začneme na 0, budeme pokračovat ve skoku zleva doprava ... nejlepší prohlídka by mohla začínat v levém bodě, a když jdeme doprava, navštivte každý bod a nakonec se vraťte k prvnímu bodu.

Definice 2: Nejbližší soused je heuristický

Možná potřebujeme jiný přístup. Vždy je velmi omezené dostat se k nejbližšímu bodu. Není tedy možné zjistit, zda jsou algoritmy správné nebo nesprávné.

Vyvstává otázka, jaký by měl být správný algoritmus pro řešení tohoto problému. Jedna odpověď by mohla být jasná, vyjmenujte možné pořadí všech bodů a poté zvolte pořadí, které minimalizuje celou délku. Garantujeme tedy dokončení nejkratší možné cesty.

Nyní tuto příležitost znovu vyhodnotíme. Řekněme, že máte celkem 20 bodů. Máme tedy 20 pro výpočet všech možných cest s 20 body! (20 faktoriálních), jedná se o 18 různých řádů 10 velikostí. Nyní je to pro počítač velmi velké číslo, a pokud n = 1000, znamená to, že budeme muset počkat na další velký třesk, než počítač vyhodnotí všechny možnosti a určí, která cesta je nejkratší. .

Tento problém je často označován jako problém cestovního dodavatele (TSP) a my se snažíme najít efektivní algoritmus, který by tento problém vyřešil, ale co je hlavním tahem z této diskuse, je zásadní rozdíl mezi algoritmy a principy. heuristický. Algoritmy vždy přinášejí správný výsledek, ale heuristika dokáže velmi dobře, ale nikdy nezaručuje úplné řešení.

Další informace o platnosti algoritmu

Pojďme se podívat na další problém a rozšířit naši mysl v okamžiku platnosti algoritmu. To je problém s plánováním. Řekněme, že jste nejvyhledávanější herec / herečka a máte seznam filmů, do kterých se můžete zaregistrovat. Návrhy přicházejí s datem zahájení a ukončení projektu. Nebudete již moci přijímat dva projekty současně, abyste mohli začít.

Cílem umělce, jako jste vy, je vydělat z těchto projektů co nejvíce peněz. Každý projekt platí totéž, což znamená, že hledáte největší množství projektů, jejichž čas je nekompatibilní. Zvažte ilustraci tohoto problému s plánováním.

Výstup - 3: Plánovací problém

Nyní například pojďme oficiálně problém identifikovat -

Problém: Problémy při plánování filmu

Úvod: Sada n intervalů na lince.

Výsledek: Jaká je největší sada nepřekrývajících se intervalů, které lze vybrat z I?

Jsem si jistý, že pro návrh tohoto algoritmu bude spousta nápadů. První z nich je, že můžete začít pracovat, jakmile je k dispozici první úloha, což znamená, že pokud nechcete zůstat nečinní, musíte začít co nejdříve.

Algoritmus výběru nejčasnějšího data zahájení

Proč to tedy není moc dobrý nápad. Přemýšlejte o prvním zaměstnání, bude to trvat dlouho a zabije všechny obchodní vyhlídky s kratšími termíny. Tento scénář je popsán níže -

Špatný nápad s nejranějším algoritmem pro začátek

Bylo by proto pro vás přirozené začít vybírat nejkratší práci a hledat nejkratší práci na každém kroku. Maximalizace tohoto počtu může zvýšit příjmy. Definujme formálně tuto heuristiku.

Krátká volba zaměstnání

Nyní tento přístup vypadá dobře, ale získání kratších pracovních míst nás může omezit na polovinu platu. V tomto případě zvažte obrázek níže.

Omezte platbu výběrem krátké práce

Podívejme se tedy na algoritmus, který je správný a efektivní -

Správný a efektivní algoritmus pro problémy s plánováním filmu

V našem případě se podívejte na Depition -3 a podívejte se, jak jsou projekty tříděny. Následující obrázek ukazuje, jak umělec přijímá filmy.

Řešení problému plánování filmu

Cestování

  1. V heuristice je vždy významný rozdíl, s algoritmy, které jsou vždy přesné a obvykle fungují dobře, ale bez záruk.
  2. Přesnost algoritmů je funkce, kterou je třeba prokázat opatrně.

Poznámka autora

Toto je první článek v řadě „Algoritmy a datové struktury“. V dalším článku vytvoříme matematický kruh, který demonstruje přesnost algoritmů. Sledujte novinky, zůstaňte informováni; Zůstaňte s námi…

Šťastné učení :)

Reference

  1. Průvodce vývojem algoritmů - Stephen Skiena, SUNY Stony Brook, Katedra informatiky, USA.
  2. Úvod do algoritmů - Cormen, Leiserson, Rivest a Stein
  3. Algoritmy a datové struktury využívající Python - Brad Miller a David Ranum, Luther College