Comment trouver l'entier survenant le nombre maximal de fois (mode) dans un tableau non trié d'entiers? Une approche O(nlogn)
Je pourrais penser à trier. Y a-t-il une autre meilleure approche?Recherche d'un nombre entier maximal (mode) dans un tableau non trié
Répondre
Je pense que vous voulez savoir l'élément qui a le plus occurences dans le tableau - si vous ne se soucient pas de la mémoire, traverse le tableau une fois , augmente le nombre de chaque élément dans la table de hachage. Ensuite, trouvez celui qui compte le plus. Vous auriez besoin d'une traverse de tableau et une de la table de hachage.
donc en pseudocode:
hashtable hash;
foreach(element in array){
if(!hash.contains(element))
hash[element] = 1;
else
hash[element]++;
}
int max = 0;
max_element;
foreach(element in hash)
if(hash[element] > max)
{
max_element = element;
max = hash[element];
}
//max_element contains the maximum occuring one.
@Axerydax Et s'il y a 10 millions d'entiers et bien sûr je ne veux pas utiliser 10 millions d'espace supplémentaire? –
@Rajendra, vous pouvez ensuite utiliser une table de hachage qui utilise une fonction de hachage pour créer des clés et n'utilise pas l'index de tableau comme clé. – sud03r
@Neeraj Bien, d'accord.Quelle est votre opinion sur une situation comme celle-ci? 1. tableau de 10 millions d'entiers. 2. un seul doublon (notre réponse) 3. repos (10 millions - 2) sont des entiers distincts. –
Si vous utilisez LINQ, vous pouvez le faire
IEnumerable.Max();
Mes chers amis, je sais cela, s'il vous plaît lire mon commentaire sur la réponse de Younes. Je peux écrire moi-même une fonction basée sur un modèle qui trouverait un entier minimum et maximum à partir d'un tableau de type int, float, ou double, ou long. –
Vous pouvez utiliser une table de hachage avec « le nombre dans le tableau » comme clé et « événements » comme valeurs.
Exemple de code comme ceci:
hashtable h;
for every entry in array
search hashtable
if present, increment num_occurrences
else, create new entry
Iterate over all the entries in hashtable and return one
with max num_occurrences
Comme la recherche dans hash est considéré comme O (1), la complexité globale sera O (n). Un cas particulier de ce problème est lorsque les nombres dans le tableau sont dans une plage donnée, dans ce cas, prenez un autre tableau d'ints avec la taille de la valeur maximale dans le tableau original, et utilisez l'index du nouveau tableau comme clé et le nombre stocké dans ce tableau en tant que nombre d'occurrences.
Renvoie l'indice de la plus grande valeur de ce tableau.
Voici un aperçu de base de ce que vous allez faire:
- d'abord trier le tableau - O (n log n) Encas d'un tri par fusion
- Declare Count = 1, MAX_COUNT = 1, MAX_VALUE = arr [0]
- Itérer au sein d'un tableau à partir de l'index 1
- Comparer chaque élément avec l'élément précédent. Mettre à jour le compte, MAX_COUNT si elles sont égales, sinon remis à zéro compte revenir à 1
- retour MAX_COUNT, MAX_VALUE
Time Complexity : O(n logn)+ O(n) Space Complexity : InPlace , no hash table or hash map is required.
Voici le code:
public void Max_Occurrence(int[] arr)
{
int count=1;
int max_count =1;
int max_value = arr[0];
for(int i=1; i<arr.length ; i++)
{
if(arr[i-1] == arr[i])
{
count++;
if(max_count<count)
{
max_count = count;
max_value = arr[i];
}
}
else
{
count = 1;//changing from count++. As per the steps mentioned above it should be reset to count = 1. Suggested by an anonymous user
}
}
System.out.println("Result:"+max_value+" has occured "+max_count+"of times");
}
Modifier suggéré par un utilisateur anonyme _" autre partie doit être changée en} sinon { count = 1 ; } } "_ – iDev
essayer.
class max_frequency
{
private int a[]=new int[20];
public void accept(int a1[])
{
a=a1;
}
public void sort()
{
int i,j,t;
for(i=0;i<20;i++)
{
for(j=i+1;j<20;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
int count=1;
int max_count=1;
int max_value=0;
for(i=1;i<a.length;i++)
{
if(a[i-1]==a[i])
{
count++;
if(max_count<count)
{
max_count=count;
max_value=a[i];
}
}
else
{
count=1;
}
}
System.out.println("Result : "+max_value+ " has occured "+max_count+ " times");
}
}
- 1. Algorithme pour nombre entier maximal dans un tableau d'entiers
- 2. Insertion d'un nombre dans un tableau trié!
- 3. convertir un nombre entier dans un tableau
- 4. random.randint pour un nombre non entier? [Python]
- 5. Comment conserver un tableau trié
- 6. tableau (non trié) tableau à la valeur en python
- 7. nombre maximal d'arêtes dans NodeXl
- 8. Convertir un tableau d'octets en nombre entier dans Delphi
- 9. Recherche dans tableau de chaînes non triés
- 10. Nombre maximal d'instructions GLSL
- 11. Recherche du nombre le plus proche dans un tableau
- 12. Marquer les N éléments supérieurs d'un tableau non trié
- 13. Sphinx non-fulltext, entier seulement recherche
- 14. nombre maximal de colonnes sur un DataGridView
- 15. Nombre maximal d'options cliquables # IE8
- 16. nombre maximal d'une valeur dans une colonne
- 17. com.sun.net.httpserver.HttpServer nombre maximal de connexions?
- 18. Nombre maximal de sockets dans java
- 19. Afficher les chiffres dans un nombre entier
- 20. Oracle 10g Nombre maximal de sessions expirées
- 21. Trié tableau Big o notation
- 22. Méthode efficace pour compter les occurrences d'une clé dans un tableau trié
- 23. stockage dans un tableau char non signé
- 24. PHP: Comment effectuer une recherche dans un tableau non indexé?
- 25. Nombre maximal de connexions simultanées jBoss
- 26. Nombre maximal de processus db déjà alloués
- 27. Nombre entier nul dans .NET
- 28. entier ne constante « pas réduit à un nombre entier »
- 29. Erreur sur le nombre maximal de fichiers
- 30. Nombre maximal de lignes d'un fichier?
J'ai mal lu la question. – Younes