Possible, Question d'Entrevue: Comment Trouver Toutes Chevauchement des Intervalles de

Ce n'est pas une question d'entrevue soi, que je suis tombé sur ceci dans mon projet, mais j'ai pensé qu'il pourrait être un décent intervew question.

Vous disposez de N paires d'intervalles, dire des entiers. Vous êtes nécessaires pour identifier tous les intervalles qui se chevauchent les uns avec les autres en O(N) fois. Par exemple, si vous avez

{1, 3}
{12, 14}
{2, 4}
{13, 15}
{5, 10}

la réponse est {1, 3}, {12, 14}, {2, 4}, {13, 15}. Notez que vous n'avez pas besoin de leur groupe, de sorte que le résultat peut être dans n'importe quel ordre, comme dans l'exemple.

J'ai juste jeté en O(N) le temps parce que le KMP algorithme prend O(N) pour la chaîne de recherche. 😀

Le meilleur, je suis venu avec et ce que je suis en ce moment dans le projet est en O(N^2). Ouais, la force brute est assez triste, mais personne ne se plaint alors je ne vais pas à refactoriser. 😛 Encore, j'étais curieux de savoir si un plus grand esprit a une solution plus élégante.

  • Deux choses ne sont pas claires: (1) vous dites "N paires d'intervalles", mais je suis assez sûr que vous avez réellement dire "N intervalles", car si il y a seulement des N paires de tous les chevauchements peuvent être trivialement trouvé en O(N) 😛 en Supposant N = nombre d'intervalles: (2) Il n'est pas possible de faire état de toutes les paires qui se chevauchent en O(N) le temps parce qu'il y a O(N^2) d'entre eux! Otoh, que c'est raisonnable de demander l'O(N) de la taille d'ensemble de tous les intervalles qui se chevauchent d'au moins un autre intervalle. Est-ce que vous me demandez?
  • gbenison de réponse (stackoverflow.com/a/9775727/47984) est le seul des 9 actuellement ici qui répond vraiment à la question en O(nlog n). Veuillez envisager de marquer que la réponse correcte.
  • C'est drôle, car j'ai eu un entretien avec amazon et ils m'ont posé une question similaire ....
  • Pouvez-vous expliquer pourquoi la réponse de marcog n'est pas en O(n lg n)?
  • Le problème est surtout que la question est très mal formulée, comme je l'ai écrit dans mon premier commentaire. Interprétée littéralement, il n'a pas de solution, donc answerers ont (raisonnablement), s'est penché pour "similaires" des problèmes. Si nous interprétons marcog de la revendication du "Nous pouvons trouver des intervalles qui se chevauchent avec qui ..." pour signifier l'inscription de toutes les paires de chevauchement des intervalles, ce qui contredit son revendiquer plus tard que "C'est un O(N logN) solution" -- il pourrait y avoir O(n^2) paires, qui n'algorithme de liste en O(n log n) en temps.
  • Fondamentalement, marcog de l'algorithme est une bonne façon de répondre à quelques questions en O(n log n) temps (comme le nombre de paires chevauchements il y a), mais il n'essaie pas de préciser qu'il vous arrive quelque chose de moins que cela (l'évidence de l'interprétation de) ce que l'OP réellement demandé. Otoh, que gbenison explicitement essayé de bidouiller les OP de la question en quelque chose de raisonnable (c'est à dire, en fait résoluble en temps O(n log n) en temps), à savoir, "la Liste de tous les intervalles qui se chevauchent d'au moins un autre intervalle" -- et puis le résoudre.
  • Je suis d'accord que la formulation n'est pas claire, mais mon interprétation initiale de la question est: Trouvez tous les intervalles qui se chevauchent avec un autre intervalle. Pour le dire plus précisément, trouvez tous les intervalles qui se chevauchent avec au moins un autre intervalle. D'autre part, si la question clairement indiqué "trouver toutes les paires d'intervalles qui se chevauchent les uns avec les autres", alors que ce serait O(N^2) comme vous l'avez dit. Notez que l'opération de l'exemple ne montre pas de paires, mais plutôt individu intervalles.
  • Cette interprétation de la question est ce que gbenison première rend explicite, et puis en résout. marcog réponse, otoh, que, néglige de clarifier les choses, puis dit qu'avec un peu d'extra tenue de livres que vous pouvez "trouver les intervalles se recoupent avec qui", ce qui pour moi implique clairement toutes les paires d'intervalles -- et ensuite prétend O(n log n) en temps. Mais la découverte de ces paires nécessite O(n^2).

InformationsquelleAutor Tom Tucker | 2010-12-28