Als interviewopdracht voor softwareontwikkelaar heb ik de taak gekregen. Ik heb een lijst met kinderen, en de taak is: kinderen oplopend sorteren op geboortedatum, banden verbreken op ID
De structuur van het kind is:
"child": { "id": "14" "name": "John" "birth_date": "1990-12-20T11:50:48Z" }
Ik kan de betekenis van de uitdrukking “banden verbreken” in de gegeven context niet begrijpen. Ik denk dat het een van de volgende kan zijn:
- als
birth_date
hetzelfde is – gaat eerst het kind met een lagereid
- tijdens het sorteren met
birth_date
, negeer het-
teken.
Reacties
- Het is ' is waarschijnlijk de eerste optie die je gaf.
- dit is een engelstalige vraag
- Zoals anderen al hebben opgemerkt, is het ' vrijwel zeker de eerste interpretatie. Ik wil echter alleen een advies geven: als het interview persoonlijk wordt afgenomen, of als er ' een gemakkelijke manier is om contact met hen op te nemen, vraag het dan gerust ter verduidelijking ter plekke. Niemand met enig verstand zal dat tegen je houden.
Antwoord
A tie-break is een extra spel wanneer twee spelers hetzelfde aantal punten hebben om te beslissen wie de winnaar is.
Ik heb deze uitdrukking nooit gehoord tijdens het sorteren, maar als je van tennis naar dat gebied transponeert, betekent dit dat al het andere gelijk is, een extra vergelijking op id om te beslissen wie het eerst is.
Zou je het hebben over een gelinkte lijst, dan zou ik meer aarzelen, omdat een gelijkspel is ook een link of een connectie. Maar zelfs met deze betekenis, in uw context van sorteren, zou de enige connectie die logisch zou kunnen zijn die van gelijkheid zijn.
Reacties
- Het concept van " banden " bij het sorteren is zeker gebruikelijk genoeg om er een trefwoord voor te hebben in SQL. " een gelijkspel verbreken " is geen technische term, maar betekent simpelweg het aanpakken van gelijkspel door een extra stap te nemen om een unieke rangschikking te garanderen – vaak een stap die vals of willekeurig van aard is (zoals het opgooien van een munt om een voetbalwedstrijd te bepalen, of het rangschikken van gegevens door I d).
- @Steve Bedankt voor deze verhelderende bevestiging. SQL TOP WITH TIES verwijst inderdaad naar gelijke waarden. Aan de andere kant ziet C ++ banden heel anders, std :: tie is een groep elementen die met elkaar zijn verbonden tot een tupel. Het ' wordt ook gebruikt bij het sorteren, maar alleen om een lexicografische volgorde tussen de elementen te creëren.
Antwoord
In de context van sorteren gaat tie-breaking over het verzekeren van een totale volgorde.
Bekijk de voorbeeldgegevens:
"id": "14" //made up data "name": "John" //real data "birth_date": "1990-12-20T11:50:48Z" //real data
Er zijn precies twee echte gegevens. Wat gebeurt er als er twee mensen zijn met identieke namen en geboortedata?
Het sorteeralgoritme kan” niet beslissen welke wordt gebruikt eerst, of zelfs als ze in wezen hetzelfde zijn, en het moet gewoon weggegooid worden bij het kopiëren.
Dit is een echt probleem omdat het sorteren van twee afzonderlijke exemplaren van een lijst kan resulteren in twee verschillende ordeningen, door ze te vergelijken op elementparen (a[0] == b[0] && a[1] == b[1] && ...
) zouden dan resulteren in false.
Dit is waarom een totale volgorde belangrijk is.
Nu is er niet meer echte gegevens om het onderscheid op te maken, dus hoe gaan we ervoor zorgen dat de elementen altijd in dezelfde volgorde worden gesorteerd. Het antwoord is om de band te doorbreken door de verzonnen gegevens te gebruiken. Het is volledig willekeurig, maar het maakt niet uit hoe vaak de lijst wordt vervormd en opnieuw wordt gebruikt, het zal de elementen altijd in dezelfde posities sorteren, waardoor vergelijking mogelijk is door elk elementpaar te vergelijken.