rendezés keretében Interjúként a szoftverfejlesztő számára megkaptam a feladatot. Van egy gyereklistám, és az a feladat: rendezni a gyerekeket, hogy növekvőek legyenek születési_dátum-időbélyegük szerint, megszakítják a kapcsolatokat azonosító szerint
A gyermek felépítése:
"child": { "id": "14" "name": "John" "birth_date": "1990-12-20T11:50:48Z" }
Nem tudom értelmezni a “kapcsolatok megszakítása” kifejezés jelentését az adott összefüggésben. Gondolom, ez a következők egyike lehet:
- ha a
birth_date
ugyanaz – először alacsonyabb gyermekkel megy aid
- a
birth_date
használatával történő rendezés közben hagyja figyelmen kívül az-
előjelet.
Megjegyzések
- ' valószínűleg az első lehetőség, amelyet adott.
- ez egy angol nyelvű kérdés
- Amint mások megjegyezték, szinte minden bizonnyal ez az első értelmezés '. Mindazonáltal csak egy tanácsot szeretnék adni: ha az interjút személyesen folytatják le, vagy ha ' van egy egyszerű módja a kapcsolatfelvételnek, nyugodtan kérdezzen tisztázásért ott és akkor. Senki, aki értelmes, ezt nem fogja ellened állítani.
Válasz
A tie-break egy extra játék, amikor két játékosnak ugyanannyi pontja van, hogy eldöntse, ki a győztes.
Soha nem hallottam ezt a kifejezést válogatás közben, de ha átültettem a teniszről erre a területre, ez azt jelenti, hogy minden más dolog egyenlő, további összehasonlítás az id-ről annak eldöntésére, hogy ki az első.
Ha linkelt listáról beszélne, többet haboznék, mert egy döntetlen link vagy kapcsolat. De még ezzel a jelentéssel is, a rendezés összefüggésében, az egyetlen kapcsolat, amely értelmes lehet, az egyenlőség.
Megjegyzések
- A " kapcsolatok " fogalma a rendezésben minden bizonnyal elég gyakori ahhoz, hogy kulcsszó legyen az SQL-ben. A " döntetlen megszakítása " nem szakkifejezés, hanem egyszerűen azt jelenti, hogy a kapcsolatokkal foglalkozunk néhány további lépéssel az egyedi rangsorok biztosítása érdekében – gyakran hamis vagy véletlenszerű lépés (például egy érme feldobása a focimeccs meghatározásához, vagy az adatok I d).
- @Steve Köszönöm ezt a felvilágosító megerősítést. Valójában az SQL FELTÉTELEKKEL FELSŐ egyenlő értékekre utal. A másik oldalon a C ++ nagyon másképp látja a kapcsolatokat, a std :: tie elemek csoportja, amelyek összekapcsolódnak ketté. ' is rendezésben használatos, de csak azért, hogy lexikográfiai rendet hozzon létre az elemek között.
Válasz
A válogatás kapcsán a döntetlen megszakítása a teljes sorrend biztosításáról szól.
Vessen egy pillantást a példa adataira:
"id": "14" //made up data "name": "John" //real data "birth_date": "1990-12-20T11:50:48Z" //real data
Pontosan két valós adat létezik, mi történik, ha két azonos névvel és születési dátummal rendelkező ember van?
A rendezési algoritmus nem tudja eldönteni, melyik megy először, vagy ha lényegében ugyanaz a dolog, és csak el kell vetni a másolaton.
Ez valódi probléma, mert a lista két külön példányának rendezése két különböző sorrendet eredményezhet, összehasonlítva őket az elempárok (a[0] == b[0] && a[1] == b[1] && ...
) hamis eredményt eredményeznek.
Ezért fontos a teljes sorrend.
Most már nincs több valós adatok a megkülönböztetéshez, akkor hogyan fogjuk biztosítani, hogy az elemek mindig ugyanabba a sorrendbe legyenek rendezve. azt válaszolja, hogy a kitöltött adatok felhasználásával meg kell szakítani a döntetlent. Teljesen önkényes, de mára nincs jelentősége annak, hogy a listát milyen sűrűn keverik össze és veszik igénybe, az elemeket mindig ugyanazokra a pozíciókra rendezi, lehetővé téve az összehasonlítást az egyes elempárok összehasonlításával.