Jako úkol pohovoru pro vývojáře softwaru jsem dostal úkol. Mám seznam dětí a úkolem je: seřadit děti vzestupně podle jejich časového razítka narození, rozbít vazby podle ID
Struktura dítěte je:
"child": { "id": "14" "name": "John" "birth_date": "1990-12-20T11:50:48Z" }
V daném kontextu nemohu pochopit význam výrazu „zlomení vazeb“. Myslím, že to může být jedno z následujících:
- pokud je
birth_date
stejné – nejprve jde dítě s nižšíid
- při třídění pomocí
birth_date
ignorujte znak-
.
Komentáře
- Je to ' pravděpodobně první možnost, kterou jste dali.
- toto je otázka v anglickém jazyce
- Jak poznamenali ostatní, ' je téměř jistě první interpretací. Chci však jen poradit: pokud je pohovor veden osobně nebo pokud je ' snadno kontaktovat, neváhejte se zeptat pro objasnění právě tam a potom. Nikdo v žádném smyslu to nebude bránit proti vám.
Odpovědět
A tie-break je hra navíc, když dva hráči mají stejný počet bodů, aby rozhodli, kdo je vítězem.
Nikdy jsem neslyšel tento výraz při třídění, ale transpozice z tenisu do této oblasti znamená, že každá jiná věc je stejná, uděláte další srovnání ID, které rozhoduje o tom, kdo je první.
Mluvíte o propojeném seznamu, váhal bych víc, protože kravata je také odkaz nebo spojení. Ale i s tímto významem, v kontextu třídění, by jediné spojení, které by mohlo dávat smysl, bylo spojení rovnosti.
Komentáře
- Koncept " vazeb " při třídění je určitě dost běžný na to, aby pro něj bylo v SQL použito klíčové slovo. " prolomení remízy " není technický pojem, ale jednoduše znamená vypořádat se s vazbami provedením nějakého dalšího kroku k zajištění jedinečného hodnocení – často krok, který má falešnou nebo náhodnou povahu (například hod mincí k určení fotbalového zápasu nebo údaje o pořadí podle I d).
- @Steve Děkujeme za toto poučné potvrzení. Ve skutečnosti SQL NAHORU S VÁZANÍMI odkazuje na stejné hodnoty. Na druhé straně C ++ vidí vazby velmi odlišně, std :: tie je skupina prvků spojených dohromady do n-tice. Používá se ' i při třídění, ale pouze k vytvoření lexikografického pořadí mezi prvky.
Odpovědět
V rámci třídění je rozdělování kravat o zajištění celkové objednávky.
Podívejte se na ukázková data:
"id": "14" //made up data "name": "John" //real data "birth_date": "1990-12-20T11:50:48Z" //real data
Existují přesně dvě části skutečných dat, co se stane, pokud existují dva lidé se stejnými jmény a daty narození?
Algoritmus řazení nemůže rozhodnout, který z nich jde zaprvé, nebo i když jsou v zásadě totéž, a při kopírování by se to mělo jednoduše zahodit.
To je skutečný problém, protože třídění dvou samostatných kopií seznamu může vést ke dvěma různým uspořádáním a jejich porovnání podle páry prvků (a[0] == b[0] && a[1] == b[1] && ...
) by pak vedly k nepravdivosti.
Proto je důležitá celková objednávka.
Nyní již neexistuje skutečná data, abychom rozlišili, tak jak zajistíme, aby byly prvky vždy tříděny do stejného pořadí. T Odpovědí je prolomení vazby pomocí vytvořených dat. Je zcela svévolné, ale nyní není důležité, jak často je seznam kódovaný a uchýlený, vždy roztřídí prvky do stejných pozic, což umožňuje srovnání porovnáním každého páru prvků.