Stromové struktury a tridici algoritmy

x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:Stromové struktury a tridici algoritmy
« Odpověď #15 kdy: 16. 11. 2017, 19:35:37 »
Mimochodem, je hezké, jak akademici pořád uvádějí quicksort, i když v reálném světě jsou někdy efektivnější jiné algoritmy.
To je snad přirozené, že se na školách učí principy a v praxi se používá něco praktického, ne?

Pokud jde o obecná data, tak si troufám tvrdit, že v reálném světě o moc lepší algoritmus než quicksort zatím nalezen nebyl. Třeba takový std::sort je intrasort, což je hybridní řadicí algoritmus založený na quicksortu, který "akorát" předchází vzniku nejblbějších situací tím, že při hlubokém zanoření přepíná na heapsort a při mrňavých sekvencích na insertionsort. Ať zkusí někdo napsat něco výrazně rychlejšího. Nemá žádnou šanci. A proto dnes taky nikdo normální žádné řadicí algoritmy nepíše.


Werner

Re:Stromové struktury a tridici algoritmy
« Odpověď #16 kdy: 16. 11. 2017, 20:01:12 »
Zkouset tyhle veci na pohovoru je blbost, zvlast pokud uchazec ma VS v oboru. To je snad dukaz ze se to na skole ucil, delal z toho zkousky, statnice. Takze pokud to bude potrebovat, zagoogli a osvezi si to. Nikdo nebude nosit v hlave neco co bezne nepouziva, zvlast v IT kde jde vyvoj rychle dopredu a clovek se musi ucit jine veci aby nezustal pozadu.

x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:Stromové struktury a tridici algoritmy
« Odpověď #17 kdy: 16. 11. 2017, 20:11:16 »
Zkouset tyhle veci na pohovoru je blbost, zvlast pokud uchazec ma VS v oboru.
Zkus na se na věc podívat z druhé strany. Máš 10 uchazečů na jedno místo a všichni jsou mistři světa.
Máš na každého pár minut. Co se jich chceš ptát, abys do dalšího kola nepustil vyložené podvodníky?
Já myslím, že zeptat se, co vědí o řadicích algoritmech, je dobrá metoda jak to pročistit :)

atarist

Re:Stromové struktury a tridici algoritmy
« Odpověď #18 kdy: 16. 11. 2017, 20:22:53 »
Zkouset tyhle veci na pohovoru je blbost, zvlast pokud uchazec ma VS v oboru. To je snad dukaz ze se to na skole ucil, delal z toho zkousky, statnice. Takze pokud to bude potrebovat, zagoogli a osvezi si to. Nikdo nebude nosit v hlave neco co bezne nepouziva, zvlast v IT kde jde vyvoj rychle dopredu a clovek se musi ucit jine veci aby nezustal pozadu.

Tak zakladni vlastnosti aspon nekolika radicich algoritmu by z hlavy dat mohl ne? Treba ktery radi prirozene, ktery in-situ a tak. Od toho se potom muze odvinout dalsi debata o souvisejicich vecech. Mj. muze dojit na slozitost, a to je dost dulezita vec obecne.

Nebo naopak: kdyz uz ma tu VS, co by tedy mel znat jako uplny zaklad?

gll

Re:Stromové struktury a tridici algoritmy
« Odpověď #19 kdy: 16. 11. 2017, 20:41:38 »
Zkouset tyhle veci na pohovoru je blbost, zvlast pokud uchazec ma VS v oboru. To je snad dukaz ze se to na skole ucil, delal z toho zkousky, statnice. Takze pokud to bude potrebovat, zagoogli a osvezi si to. Nikdo nebude nosit v hlave neco co bezne nepouziva, zvlast v IT kde jde vyvoj rychle dopredu a clovek se musi ucit jine veci aby nezustal pozadu.

Když nevíš, co máš googlit, google moc nepomůže.


zsdfaefasdfa

Re:Stromové struktury a tridici algoritmy
« Odpověď #20 kdy: 16. 11. 2017, 20:55:40 »
je to jednoduchy filtr.
vis neco o trideni ok, muzes pokracovat, nevis lautr nic, otazka zni co mas v hlave?!?!

vis jak urezat kus dreva, ok muzes studovat na truhlare, ne tak jdi na popelare.

angular

Re:Stromové struktury a tridici algoritmy
« Odpověď #21 kdy: 16. 11. 2017, 21:19:53 »
Akorát že programátor, který neumí programovat, klidně může z paměti vystřihnout quicksort. Protože „umět programovat“ právě znamená něco jiného.

+1

Zkouset tyhle veci na pohovoru je blbost, zvlast pokud uchazec ma VS v oboru.
Zkus na se na věc podívat z druhé strany. Máš 10 uchazečů na jedno místo a všichni jsou mistři světa.
Máš na každého pár minut. Co se jich chceš ptát, abys do dalšího kola nepustil vyložené podvodníky?
Já myslím, že zeptat se, co vědí o řadicích algoritmech, je dobrá metoda jak to pročistit :)

Spíše to ukazuje, že je na pohovoru s retardem, tak to asi ve zbytku firmy lepší nebude. Ale proč ne...

angular

Re:Stromové struktury a tridici algoritmy
« Odpověď #22 kdy: 16. 11. 2017, 21:21:10 »
A jak nám jako studentům říkával na škole Virius - programátor, který nezná základní třídící algoritmy, to ani není programátor.

Tak alespoň vidíš, proč musí učit. S tímhle by v reálném životě moc neuspěl.

Re:Stromové struktury a tridici algoritmy
« Odpověď #23 kdy: 16. 11. 2017, 21:33:35 »
To je snad přirozené, že se na školách učí principy a v praxi se používá něco praktického, ne?
To ale není podstata toho, o čem jsem psal. Problém je v tom, že ve školách se jako „programování“ učí principy algoritmů jako quicksort, ale v praxi pak dotyčný bude řešit, jak data uspořádat tak, aby je mohl zpracovávat paralelně (a to ne na úrovni datových struktur v paměti, ale na úrovni datových struktur v databázi); nebo jak navrhnout architekturu aplikace tak, aby horizontálně škálovala přidáváním dalších serverů; nebo aby tušil něco o UX; a nebo, pokud už se bude zabývat quicksortem, tak bude řešit to, že O(n log n) je sice hezká věc, ale v praxi bude propastný rozdíl v tom, když se bude pohybovat v jednom řádku cache RAM, nebo když přístup ke každému prvku bude znamenat výpadek stránky a čekání na nahrání z hlavní paměti.

Pokud jde o obecná data, tak si troufám tvrdit, že v reálném světě o moc lepší algoritmus než quicksort zatím nalezen nebyl. Třeba takový std::sort je intrasort
Takže jste si na tohle odpověděl sám.

A proto dnes taky nikdo normální žádné řadicí algoritmy nepíše.
A proto dnes taky nedává smysl zkoušet z nich nastupující programátory. Jistě, když to bude vypadat, že nízkoúrovňové algoritmy jsou silná stránka dotyčného, zeptám se ho na to – ale pak bych stejně nechtěl, aby mi na papíře implementoval quicksort, ale zajímalo by mne právě to, co ví o těch novějších upravených algoritmech. Protože z toho poznám právě to, jestli o tom jenom slyšel ve škole, nebo o tom opravdu ví něco víc.

Re:Stromové struktury a tridici algoritmy
« Odpověď #24 kdy: 16. 11. 2017, 21:58:42 »
vis jak urezat kus dreva, ok muzes studovat na truhlare, ne tak jdi na popelare.
Ono je to spíš: „Víš, jak uříznout kus dřeva? OK, můžeš jít dělat zedníka.“ Vždyť přece domy se dříve dělaly ze dřeva, a postupným vývojem se výstavba domů dostala do dnešního stavu. Tak přijmeme někoho, kdo umí se dřevem, a taky se asi postupným vývojem dostane od dřeva k dnešním železobetonovým stavbám…

Zkus na se na věc podívat z druhé strany. Máš 10 uchazečů na jedno místo a všichni jsou mistři světa.
Máš na každého pár minut. Co se jich chceš ptát, abys do dalšího kola nepustil vyložené podvodníky?
Já myslím, že zeptat se, co vědí o řadicích algoritmech, je dobrá metoda jak to pročistit :)
Jako metoda jak rychle zmenšit počet uchazečů je to jistě skvělé. Nicméně já, když budu investovat několik měsíců nebo let do toho, abych si vychoval nějakého junior programátora, se nechci co nejrychleji zbavit co největšího počtu uchazečů, ale chci si vybrat toho nejlepšího, který zapadne do týmu.

A upřímně řečeno, dneska mne u juniora zajímá hlavně to, jestli už má s programováním nějaké zkušenosti, aby věděl, do čeho jde – aby po půl roce nezjistil, že ho to vlastně nebaví. Když ho to bude bavit, tak se to naučí – a vlastně jsem na pohovoru nikdy neměl absolventa, který by ze školy uměl programovat. Buď se to naučil ještě někde jinde, a nebo ze školy uměl napsat kód, který šel přeložit, ale o moc dál nebyl. Dál se s ním radši bavím o tom, co zná, a zajímají mne jeho názory – proč si to vybral, co mu na tom vyhovovalo, co se mu nelíbilo. Podle toho poznám, jaký má přístup a jestli má pro programování nějaký cit.

Ale je pravda, že někteří kolegové uchazeče zkouší třeba ze standardní knihovny, to si vždycky říkám, že bych u nich nejspíš neprošel :-) Mně ale nikdy nezajímalo, co dotyčný neví, naopak mne zajímá, co ví.

x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:Stromové struktury a tridici algoritmy
« Odpověď #25 kdy: 16. 11. 2017, 22:39:27 »
v praxi pak dotyčný bude řešit, jak data uspořádat tak, aby je mohl zpracovávat paralelně (a to ne na úrovni datových struktur v paměti, ale na úrovni datových struktur v databázi); nebo jak navrhnout architekturu aplikace tak, aby horizontálně škálovala přidáváním dalších serverů; nebo aby tušil něco o UX;
Wow, to jsem se v dotazu ani náhodou nedočetl :)

A proto dnes taky nedává smysl zkoušet z nich nastupující programátory.

Jak píšu výše. Předpokládám, že jde o pohovor, ve kterém se zjistí jestli uchazeč není podvodník. Psát algoritmus na papír považuji za  tragédii – u Honzíka jsme dostávali minusy za chybějící středníky na papíře! Pro mě je ten dotaz na řazení jen jeden bod pohovoru. Je věcí uchazeče, jak to rozjede. Měl by mluvit hlavně on. Pokud mi bude vyprávět o problematice volby pivota, má bod, pokud bude vědět jména funkcí v použitém prostředí, má bod, stabilní řazení, paralelizace... Ale stejně tak si myslím, že by byl dobrý i třeba dotaz typu, jaké jsou rozdíly mezi SSD - HDD, BTRFS - FAT, GIF - JPEG - RAW, vektor - bitmapa, UTF8 - UTF16LE, cokoliv, co je poblíž budoucí práci... Mě osobně až tak úplně nezajímá, co umí (samozřejmě, že potřebné základy musí mít), ale spíš jestli uvažuje logicky a pracuje dobře s informacemi, které už má, a ví, jak se dostat k dalším... Jestli neblábolí a nebo dokonce nelže. I za upřímné "nevím" dávám bod.

Pár programujících blbců za klávesnicí jsem už zblízka viděl, občas dokonce opravuji jejich zdrojáky. Marnost nad marnost >:(

Programátora si vychováme, ale nesmí to být blbec a šmejd.

angular

Re:Stromové struktury a tridici algoritmy
« Odpověď #26 kdy: 16. 11. 2017, 22:51:08 »
Pár programujících blbců za klávesnicí jsem už zblízka viděl, občas dokonce opravuji jejich zdrojáky. Marnost nad marnost >:(

Programátora si vychováme, ale nesmí to být blbec a šmejd.

A jak se to projevovalo?

Právě programátor se vychovat nenechá, protože není ovce bez vlastních nápadů. Hledáš vůbec programátory?

Kiwi

Re:Stromové struktury a tridici algoritmy
« Odpověď #27 kdy: 17. 11. 2017, 02:37:11 »
A na základních školách se za mých mladých let mimo jiné vysvětlovalo, co to jsou synonyma. Kde jsou ty časy...
Tak pro absolventa základní školy by se to za synonyma považovat dalo. Ale programátor by v tom rozdílu měl mít jasno.
Pouč mne, prosím.

Já zase nechápu uchazeče o místo, kteří mají potřebu potenciálního zaměstnavatele poučovat o tom, co vlastně potřebuje a co ne a na co se jich má ptát.
Já nejsem uchazeč o místo. A zaměstnavatele nepoučuju, jenom jsem podotkl, že tenhle typ testu zpravidla zjišťuje něco jiného, než zaměstnavatel od programátora potřebuje.
Několik let jsem tuto práci vykonával, tj. rozhodoval se podle životopisů a na pohovoru, koho si do oddělení vezmeme za spolupracovníka. Ale jak tak čtu, tak jsem se měl zeptat diskutérů na rootu, aby mi poradili, na co se těch uchazečů mám vlastně ptát. Patrně to tu víte lépe než já, který jsem jim zadával práci a na něhož se obraceli, pokud narazili na nějaký problém.
Problém pramenící z neznalosti nějakého protokolu nebo nějaké knihovny či nějakého standardu mi nikdy nedělal starosti, to jsem vždycky rád vysvětlil a vyšlo to rychleji, než nechat nebožáka vrtat se v dokumentaci. Ale když někomu řeknete, aby danou věc neřešil vnořeným voláním, ale pomocí stavové proměnné, protože jinak se nevejdeme do zásobníku, a on na vás čumí jak tele na nová vrata, tak je vám jasné, že zase v práci budete muset zůstat trčet do noci, ale mzdu za to dostane to jelito. To je přesně ten důvod, proč k sobě chcete lidi, kteří se ve svém oboru orientují a když náhodou něco nevědí, tak to alespoň rychle pochopí. A nějak na to holt musíte přijít pokud možno během pohovoru.

Zaměstnavatel si ověřuje, zda uchazeč o místo programátora umí programovat - no co si to dovoluje!
Právě že tak to není. „Umět programovat“ může znamenat spoustu různých věcí, a ve většině případů to není „umět z paměti napsat quicksort“.
O žádný quicksort mi nikdy nešlo a neznám nikoho, kdo by u pohovoru někoho zkoušel z quicksortu. Ale co mě zajímalo je např. to, zda tuší, co je backtracking, co je dynamické programování, jaký je rozdíl mezi prohledáváním do šířky a do hloubky, jestli tuší, jak se dají organizovat data a jaké má která organizace výhody a nevýhody, zda tuší, že existují algoritmy časově náročnější a méně náročné a že nejjednodušší řešení nemusí být to nejefektivnější apod. Ne teoreticky, ale na základě příkladu, který měl vyřešit. Ale spoustu uchazečů to vůbec netrklo, nač ten který příklad míří. Mimochodem, příklad na prohledávání do šířky a příklad na dynamické programování jsem dával spíš jako hozenou rukavici, zda se někdo třeba chytne, ale za ty 4 roky, kdy jsem ty pohovory dělal, je zvládlo přesně nula uchazečů.
Zajímavé bylo, že čím větší jelito, tím větší mzdu si představovalo. Vždyť to je podobné, jako by se na zubařské oddělení hlásilo deset lidí, z nichž dva aspoň dokážou poznat kazový zub a opravit ho, další čtyři sice kaz poznají, ale nevědí, co s ním, a zbytek nezvládá ani to. Na zánět kořenových kanálků a jeho řešení se ale raději neptejte nikoho z těch deseti. Tak jestli vám to připadá normální, tak mně to teda připadá šílené!

A jak nám jako studentům říkával na škole Virius - programátor, který nezná základní třídící algoritmy, to ani není programátor.

Tak alespoň vidíš, proč musí učit. S tímhle by v reálném životě moc neuspěl.
Mě spíš děsí, když v reálném životě uspěje člověk, který plácá pamětí v ASICu a nevejde se do časování protokolu kvůli tomu, že pomocí floating pointu na železe bez FPU počítá něco, na co stačí pár bitových manipulací, kdyby o nich něco tušil.

A proto dnes taky nedává smysl zkoušet z nich nastupující programátory.
myslím, že by byl dobrý i třeba dotaz typu, jaké jsou rozdíly mezi SSD - HDD, BTRFS - FAT, GIF - JPEG - RAW, vektor - bitmapa, UTF8 - UTF16LE, cokoliv, co je poblíž budoucí práci... Mě osobně až tak úplně nezajímá, co umí (samozřejmě, že potřebné základy musí mít), ale spíš jestli uvažuje logicky a pracuje dobře s informacemi, které už má, a ví, jak se dostat k dalším... Jestli neblábolí a nebo dokonce nelže. I za upřímné "nevím" dávám bod.
Tak přesně na takové blbiny jsem se teda nikdy neptal. Zvládnutí konkrétní technologie je z časového hlediska zanedbatelnou otázkou, ale učit někoho programovat během zkušební doby, když to nezvládl za předchozí roky studia, to teda good luck.
Řekl bych, že ptát se člověka, který se dokáže vypořádat s nějakým jednoduchým grafovým problémem, na rozdíly mezi vektorem a bitmapou, je poněkud zbytečné a na pochopení rozdílu mezi BTRFS a FAT mu bude stačit pár minut studia příslušných specifikací. Takže i kdyby to mělo být hlavní náplní jeho práce, tak by mi vadilo podstatně méně, kdyby o tom neměl žádné předchozí znalosti, než kdyby mi pak výpočet pozice nějakého bloku či bajtu mastil přes FP.

Pro zajímavost, zažil jsem i člověka, který ani po upozornění na konkrétní řádek nechápal, v čem má chybu ("nulovost" doublu testoval pomocí ==) a rozčiloval se, že máme asi nějakou chybu v překladači, protože v těch proměnných jsou nějaká trochu jiná čísla, než jaká do nich přiřazuje. Ale podle zdejších diskutérů programátor přece nemusí nic vědět o tom, jak jsou v počítači reprezentována čísla. To přece od něj nikdo nemůže chtít, když jeho náplní práce nebude implementace matematických simulací. Akorát mám obavu, že kdyby v popisu pozice byla, výsledek by byl stejný.

FS

Re:Stromové struktury a tridici algoritmy
« Odpověď #28 kdy: 17. 11. 2017, 08:28:18 »
A na základních školách se za mých mladých let mimo jiné vysvětlovalo, co to jsou synonyma. Kde jsou ty časy...
Tak pro absolventa základní školy by se to za synonyma považovat dalo. Ale programátor by v tom rozdílu měl mít jasno.
Pouč mne, prosím.

Nebudu se vyjadřovat ke zbytku, na to nemám zkušenosti, ale řazení je podle mého sestavování skupin podle nějakého kritéria, např. od největšího po nejmenší.

Třídění je naopak do skupin, např. rozdělím objekty do skupin podle barev, vlastností nebo typu.

Vzhledem ke způsobu Vašeho vyjadřování a oblastech, o jakých hovoříte, jsem si to ale zkontroloval s pomocí Wikipedie a ejhle, dává mi za pravdu.
https://cs.wikipedia.org/wiki/%C5%98azen%C3%AD
https://cs.wikipedia.org/wiki/T%C5%99%C3%ADd%C4%9Bn%C3%AD

Takže za mě, s respektem k veškerým Vašim zkušenostem a s přihlédnutím k faktu, jak posuzujete oblasti, které by měl uchazeč znát a jak rychle by dokázal nastudovat některé problémy,

UTFG!!!!

Ale jinak obecně každý dělá chyby...

Radovan.

Re:Stromové struktury a tridici algoritmy
« Odpověď #29 kdy: 17. 11. 2017, 08:43:45 »
A teď tu vypukne dvoutisícpříspěvkový flame o slovíčkaření ;D

Takže pár dotazů do pranice:
1. Strom se řadí nebo třídí? Nějak mi není jasné jak budu řadit dva objekty v různých větvích.
2. Seřazení různých položek beru, ale co když se opakují? Budu je v poli řadit nebo třídit?

Ono možná to slovo "třídění" má svoje důvody, jaký je přesný významový ekvivalent anglického "sort"?