Récemment, j'ai eu un entretien au cours duquel on m'a posé une " recherche Question ".
La question était :
Supposons qu'il existe un tableau d'entiers (positifs), dont chaque élément est soit
+1
o-1
par rapport à ses éléments adjacents.Ejemplo:
array = [4,5,6,5,4,3,2,3,4,5,6,7,8];
Maintenant, cherchez
7
et retourner sa position.
J'ai donné cette réponse :
Stockez les valeurs dans un tableau temporaire, triez-les, puis appliquez la recherche binaire.
Si l'élément est trouvé, on retourne sa position dans le tableau temporaire.
(Si le nombre apparaît deux fois, il faut retourner sa première occurrence).
Mais, ils ne semblaient pas satisfaits de cette réponse.
Quelle est la bonne réponse ?
4 votes
Pour autant que je sache, une recherche linéaire est un bon moyen de localiser l'indice d'un élément dans le tableau. Je ne suis pas encore sûr d'un autre algorithme de recherche qui soit efficace pour localiser l'indice d'un élément.
0 votes
Dans la recherche linéaire, je dois parcourir chaque élément... y a-t-il un modèle ou autre chose... car je dois minimiser la complexité...
0 votes
Jusqu'à présent, je suggère une recherche linéaire.
4 votes
Si l'on garantit que le 7 n'apparaîtra qu'une seule fois ou si le 7 retourné n'a pas d'importance, on peut améliorer encore l'algorithme linéaire de la réponse de Coleman.
53 votes
Si votre solution originale nécessite un tri, elle est pire que la recherche linéaire naïve. Vous semblez ne pas en être conscient.
5 votes
Le tri nécessite O(nlogn), et une recherche binaire est O(logn). Si vous devez rechercher de nombreuses valeurs dans un grand tableau, votre réponse peut être meilleure, mais si vous ne devez effectuer qu'une seule recherche, les algorithmes O(n) peuvent être meilleurs.
0 votes
Les données d'entrée devaient-elles comporter une exigence supplémentaire, à savoir que l'élément à rechercher devait être plus grand que le premier élément du tableau et plus petit que le dernier élément du tableau ?
0 votes
@PaulHankin Non...il n'y a pas de telles exigences...pas de telles conditions...Seulement j'ai un tableau et la valeur doit être recherchée.
0 votes
@RahulMishra vous n'aimiez pas la recherche linéaire parce que vous n'aimiez pas qu'elle doive parcourir chaque élément, donc vous avez proposé 1) de copier dans un tableau temporaire, puis 2) de trier le tableau temporaire. voyez-vous le problème avec cela ?
1 votes
Voici quelques conseils tirés de mon expérience des entretiens. Lorsqu'on vous pose ce genre de questions, la solution souhaitée consiste rarement à trier les entrées.
0 votes
@user2023861 merci pour votre suggestion je garderai toujours cela à l'esprit :)
24 votes
Je ne sais pas pourquoi personne d'autre ne l'a mentionné : votre méthode n'était pas seulement inefficace, elle était incorrect et c'est bien pire qu'une simple inefficacité. L'exigence est que la position d'un nombre donné dans le tableau original . Votre méthode retourne la position du nombre dans un tableau trié . Maintenant, vous pourrait récupérer la position originale, en convertissant le tableau simple en un tableau de tuples (nombre, orig_pos) avant de trier. Mais vous n'avez pas mentionné cela, donc je suppose que vous ne l'avez pas non plus mentionné dans l'interview.
1 votes
La spécification du problème comprend le détail que chaque élément du tableau est soit +1 ou -1 son élément précédent. Bien qu'il soit possible qu'ils aient ajouté ce détail pour brouiller les pistes, il semble que cela ait été prévu pour vous aider à créer un algorithme plus efficace qu'une recherche normale. Le fait que votre algorithme n'en tire pas profit est probablement la raison pour laquelle ils vous ont immédiatement recalé.
0 votes
Y a-t-il une application pratique de cette recherche ? Je suis simplement curieux.
3 votes
@RSahu Ce type de données apparaît dans les martingales, les marches aléatoires et le mouvement brownien.