9
votes

Répondre aux algorithmes de conflit

J'ai eu une interview aujourd'hui et j'ai été invitée à vérifier si deux conflits de conflits entre eux ou non. Chaque réunion a commencé l'heure et la fin de la fin. J'ai essayé de répondre à la question mais pas si spécifique ..Pon que quelqu'un jette une idée?
xxx

devrait retourner vrai si le conflit est là et faux s'il n'y a pas de conflit.

E.g

vrai si:

(S1, E1) = 8,10

(S2, E2) = 9, 11

(S1, E1) = 7,10

(S2, E2) = 8, 9

(S1, E1) = 8,11

(S2, E2) = 9, 11 et ainsi sur


5 commentaires

Je vois Nombre de questions spécifiques à la langue qui aurait des réponses utiles, mais rien de général ...


Il n'y a vraiment rien de plus que cela semble - juste quelques si s pour voir si les dates se chevauchent. Ces si S pourraient être rationalisés et réduits en nombre si, par exemple, les dates sont triées d'une certaine manière (par exemple en fonction de leur départ, et après cela - à leur fin).


Ceci est juste une variante de ma réponse ici: Stackoverflow.com/questions/4718004/tricky-interview-Questio N < / a>


5 Réponses :


2
votes

Dans le cas simple de deux intervalles, je pense que cela fonctionnera (pseudocode non testé): xxx


1 commentaires

Alors que je suis d'accord, la solution de Lasse est plus élégante, votre solution est plus facilement comprise dans l'IMHO



1
votes

Les réunions se chevauchent si et uniquement si max (S1, S2) . Cette approche basée sur l'intersection suppose que les intervalles (s, e) sont ouverts et impliquent (à tort ou à tort) qu'un vide réunion s = e ne peut pas avoir de chevauchement avec une autre réunion.


0 commentaires

24
votes

Ceci est une algèbre d'intervalle de base, voir Ma réponse ici pour plus de détails , mais Le code ressemblerait à ceci:

bool IsConflict(Datetime s1, Datetime e1, Datetime s2, Datetime e2)
{
    return (s1 < e2) && (e1 > s2);
}


2 commentaires

Dommage que c'est la communauté wiki, je pense que vous méritez deux upvotes par utilisateur pour cette réponse liée.


Non, je l'ai explicitement fabriqué pour éviter cela, la question est en libération d'un duplicata, mais suffisamment différente de celui-ci, mais ma réponse ne serait donc pas, d'où cw.



1
votes

La complexité de l'algorithme suivant est O (nlogn) xxx


0 commentaires

0
votes

le plan Il y a trois cas pour vérifier avec ce problème.

  • Cas 1: S1 est-ce que S1 se situe dans l'intervalle [S2, E2] (S1> = S2) && (S1 <= E2)
  • Cas 2: Est-ce que E1 se situe dans l'intervalle [S2, E2] (E1> = S2) && (E2 <= E2))
  • Cas 3: Le point (S2, E2) est-il dans [S1, E1] (S1 <= S2) && (E1> = E2)

    Voici donc la réponse. Je m'excuse; Ce n'est pas les lignes de code les plus lisibles.

    le code (pseudo): xxx


0 commentaires