O que significa “ desempate ” no contexto da classificação

Como uma entrevista para desenvolvedor de software, recebi a tarefa. Eu tenho uma lista de filhos, e a tarefa é: classificar os filhos em ordem crescente pelo carimbo de data / hora birth_date, rompendo laços por ID

A estrutura da criança é:

"child": { "id": "14" "name": "John" "birth_date": "1990-12-20T11:50:48Z" } 

Não consigo entender o significado da frase “quebrar laços” no contexto dado. Eu acho que pode ser um dos seguintes:

  • se birth_date for o mesmo – primeiro vai filho com id
  • ao classificar usando birth_date, ignore o sinal -.

Comentários

  • É ' provavelmente a primeira opção que você deu.
  • esta é uma pergunta em inglês
  • Como outros notaram, é ' quase certamente a primeira interpretação. Porém, quero apenas dar um conselho: se a entrevista for realizada pessoalmente ou se houver ' uma maneira fácil de entrar em contato com eles, sinta-se à vontade para perguntar para esclarecimentos ali mesmo. Ninguém sensato usará isso contra você.

Resposta

A tie-break é uma jogada extra quando dois jogadores têm o mesmo número de pontos para decidir quem é o vencedor.

Nunca ouvi essa expressão na classificação, mas transpondo de tênis para essa área, significa que tudo o mais sendo igual, você faz uma comparação extra no id para decidir quem é o primeiro.

Você falaria de uma lista vinculada? Eu hesitaria mais, porque um empate também é um link ou uma conexão. Mas mesmo com esse significado, em seu contexto de classificação, a única conexão que poderia fazer sentido seria a de igualdade.

Comentários

  • O conceito de " empates " na classificação é certamente comum o suficiente para ter uma palavra-chave para ele no SQL. " desempate " não é um termo técnico, mas simplesmente significa lidar com empates tomando alguma etapa adicional para garantir classificações exclusivas – muitas vezes uma etapa que é espúria ou aleatória por natureza (como jogar uma moeda para determinar uma partida de futebol ou dados de classificação por I d).
  • @Steve Obrigado por esta confirmação esclarecedora. Na verdade, SQL TOP WITH TIES refere-se a valores iguais. Por outro lado, o C ++ vê os laços de maneira muito diferente, std :: tie sendo um grupo de elementos ligados em uma tupla. É ' também usado na classificação, mas apenas para criar uma ordem lexicográfica entre os elementos.

Resposta

No contexto da classificação, o desempate é a garantia de uma ordem total.

Dê uma olhada nos dados de exemplo:

 "id": "14" //made up data "name": "John" //real data "birth_date": "1990-12-20T11:50:48Z" //real data 

Existem exatamente dois dados reais, o que acontece se houver duas pessoas com nomes e datas de nascimento idênticos?

O algoritmo de classificação não consegue decidir qual vai primeiro, ou mesmo se forem essencialmente a mesma coisa, e deve ser descartado na cópia.

Este é um problema real porque classificar duas cópias separadas de uma lista pode resultar em duas ordens diferentes, comparando-as por pares de elementos (a[0] == b[0] && a[1] == b[1] && ...) resultariam em falso.

É por isso que uma ordem total é importante.

Agora, não há mais dados reais para fazer a distinção, então como vamos garantir que os elementos sempre serão classificados na mesma ordem. A resposta é quebrar o empate usando os dados inventados. É completamente arbitrário, mas agora, independentemente da frequência com que a lista é embaralhada e reorganizada, ele sempre classificará os elementos nas mesmas posições, permitindo a comparação, comparando cada par de elementos.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *