2015-08-28 2 views
0

La question est la suivante: Chaque année, je reçois les grades N (pas de nombres discrets 0-100),Comment puis-je le faire en temps linéaire pour chaque année?

A. Je dois trouver la note maximale pour l'année. B. À la fin de l'année N, je dois retourner les N plus hautes notes de toutes les années N2 de toutes les N années.

T (i) est l'exécution de l'algorithme au cours de l'année i.

I nécessité de proposer une structure algorithme/données qui fera A & hôte à MAX (T (1), T (2), ..., T (N)) = O (N). (Travail linéaire chaque année)

Une solution dans O (NlogN) est la plus basse que j'ai obtenue en maintenant un maximum de N catégories maximales de chaque année et tas maximum pour chaque année, et supprimer min et insérer la suivante en ligne à partir de quelle année nous avons supprimé.

Merci pour votre aide!

+0

Vous avez pas d'ordre d'aucune sorte? Je ne vois pas comment vous pouvez éviter de regarder au moins une fois toutes les notes N^2 alors ... Je ne vois même pas votre O (N log N) travailler. –

+0

@JeanLogeart chaque année l'algorithme reçoit N grades, et doit les traiter en O (N). –

Répondre

0

Conserver un tableau avec des positions N * 2.

  1. Au cours de la première année, remplir les N premières positions.

  2. Dans la deuxième année, remplissez les N positions restantes. Exécutez l'algorithme QuickSelect (avec la médiane des médianes) pour partitionner le tableau entre N plus grand et N plus bas dans O (N).

  3. Répéter de 2 jusqu'à l'année N.

+0

Quel est l'argument que je donne à l'algorithme de sélection déterministe? Qu'arrivera-t-il si j'ai des notes en double? Beaucoup de notes dupliquées ... –

+0

En deuxième réflexion, je perdrai la contrainte de non-duplication des notes, car ce sont les N plus grandes notes et je ne vois pas de solution sans doublons qui ne détruiront pas la complexité temporelle linéaire. Merci pour la solution ! –