Jako zlecenie na rozmowę kwalifikacyjną z programistą otrzymałem zadanie. Mam listę dzieci, a zadanie jest następujące: posortuj dzieci rosnąco według sygnatury czasowej ich daty urodzenia, zrywanie więzi według identyfikatora
Struktura dziecka jest następująca:
"child": { "id": "14" "name": "John" "birth_date": "1990-12-20T11:50:48Z" }
Nie mogę zrozumieć znaczenia wyrażenia „zrywanie więzi” w danym kontekście. Myślę, że może to być jedna z następujących sytuacji:
- jeśli
birth_date
jest takie samo – najpierw dziecko z niższymid
- podczas sortowania przy użyciu znaku
birth_date
zignoruj znak-
.
Komentarze
- To ' to prawdopodobnie pierwsza opcja, którą podałeś.
- to jest pytanie w języku angielskim
- Jak zauważyli inni, jest to ' prawie na pewno pierwsza interpretacja. Chcę jednak tylko doradzić: jeśli rozmowa jest prowadzona osobiście lub jeśli ' jest łatwym sposobem na skontaktowanie się z nimi, zachęcamy do zapytania dla wyjaśnienia od razu. Nikt z rozsądkiem nie będzie miał tego przeciwko tobie.
Odpowiedź
A tie-break to dodatkowa gra, w której dwóch graczy ma taką samą liczbę punktów, aby zdecydować, kto wygra.
Nigdy nie słyszałem tego wyrażenia podczas sortowania, ale transponując z tenis do tego obszaru, oznacza to, że wszystko inne jest równe, dodatkowe porównanie identyfikatora, aby zdecydować, kto pierwszy.
Czy powiedziałbyś o liście połączonej Wahałbym się bardziej, ponieważ remis jest również łączem lub połączeniem. Ale nawet przy takim znaczeniu, w kontekście sortowania, jedynym połączeniem, które mogłoby mieć sens, byłoby połączenie równości.
Komentarze
- Koncepcja " ties " w sortowaniu jest z pewnością na tyle powszechna, że ma dla niej słowo kluczowe w SQL. " rozwiąż remis " nie jest terminem technicznym, ale po prostu oznacza radzenie sobie z remisami, wykonując dodatkowe kroki w celu zapewnienia niepowtarzalnych rankingów – często krok, który ma charakter fałszywy lub losowy (taki jak rzucanie monetą w celu ustalenia meczu piłki nożnej lub dane rankingowe przez I d).
- @Steve Dzięki za to pouczające potwierdzenie. Rzeczywiście, SQL TOP WITH TIES odnosi się do równych wartości. Z drugiej strony C ++ widzi powiązania zupełnie inaczej, std :: tie będący grupą elementów połączonych razem w krotkę. ' jest również używany do sortowania, ale tylko do tworzenia porządku leksykograficznego między elementami.
Odpowiedź
W kontekście sortowania, rozwiązywanie remisów polega na zapewnieniu całkowitej kolejności.
Spójrz na przykładowe dane:
"id": "14" //made up data "name": "John" //real data "birth_date": "1990-12-20T11:50:48Z" //real data
Istnieją dokładnie dwa fragmenty prawdziwych danych, co się stanie, jeśli będą dwie osoby o identycznych imionach i datach urodzenia?
Algorytm sortowania nie może zdecydować, która z nich zostanie wybrana po pierwsze, lub nawet jeśli są w zasadzie tym samym i powinny po prostu odrzucić przy kopiowaniu.
Jest to prawdziwy problem, ponieważ sortowanie dwóch oddzielnych kopii listy może skutkować dwoma różnymi uporządkowaniami, porównując je według pary elementów (a[0] == b[0] && a[1] == b[1] && ...
) skutkowałyby wtedy fałszem.
Dlatego tak ważna jest całkowita kolejność.
Teraz nie ma już rzeczywiste dane, aby dokonać rozróżnienia, więc w jaki sposób zapewnimy, że elementy będą zawsze sortowane w tej samej kolejności. T Odpowiedź brzmi: zerwać remis za pomocą zmyślonych danych. Jest to całkowicie dowolne, ale teraz bez względu na to, jak często lista jest zaszyfrowana i uciekana, zawsze sortuje elementy w te same pozycje, umożliwiając porównanie przez porównanie każdej pary elementów.