Algoritmo de frecuencia del elemento dentro de la matriz en el tiempo O (n) -- arrays campo con algorithm camp Relacionados El problema

Frequency algorithm of element inside array in time O(n)


1
vote

problema

Español

Quería preguntar si hay un algoritmo que puede encontrar, en una matriz de longitud n , si hay un elemento de matriz con un cierto porcentaje de frecuencia (10%, 20%, etc. .) En tiempo lineal.

La selección es O(n^2) y el algoritmo mayoritario incluso si O(n)66 puede encontrar si el número se repite al menos N / 2 veces.

Original en ingles

I wanted to ask if there is an algorithm that can find, in an array of length n, if there is an array element with a certain frequency percentage (10%, 20% etc...) in linear time.

Selection sort is O(n^2) and the majority algorithm even if O(n) can only find if the number is repeated at least n/2 times.

     
         
         

Lista de respuestas

1
 
vote

Estás haciendo esto para ser mucho más difícil de lo que realmente es, suponiendo que no tiene límites de espacio.

La idea es iterar la matriz y guardar el recuento de cada elemento mientras lo hace. Diccionario (o estructura equivalente) La búsqueda es O (1), por lo que no es un problema.
Luego, solo iterate sobre el diccionario y vea qué elementos tienen la frecuencia requerida.

Python Pseudocode:

  for elem in array:     count[elem] = count.get(elem, 0) + 1 for elem, elem_count in count.items():     if 0.20 <= float(elem_count) / len(array) <= 0.25:         print "{} has a frequency between 20% and 25%".format(elem)   
 

You are making this out to be a lot harder than it really is, assuming you don't have space limits.

The idea is to iterate the array and save the count of each element while doing so. Dictionary (or equivalent structure) lookup is O(1) so it's not a problem.
Then just iterate over the dictionary and see what elements have the required frequency.

Python pseudocode:

for elem in array:     count[elem] = count.get(elem, 0) + 1 for elem, elem_count in count.items():     if 0.20 <= float(elem_count) / len(array) <= 0.25:         print "{} has a frequency between 20% and 25%".format(elem) 
 
 
0
 
vote

int contador = 0; (sin influencia en el tiempo de ejecución en esta línea de código).
Iterir el Arry usando el bucle (para, mientras que, lo que). Para cada elemento:
- Si (elemento == what_you_search)
contador ++;

// Esto si la declaración es O (1) en cada iteración, hubo n interaciones, por lo que en general es
// o (n) para todo el bucle.
INT Porcentaje = contador / (Array.len ()); // se está haciendo en O (1).

O (1) + O (N) + O (1) = O (N)

 

int counter = 0; (no influence on run time in this code line).
Iterate the arry using loop (for,while,whatever). For each element:
- if(element == what_you_search)
counter++;

//This if statment is o(1) in each iteration, there were n interation so in the overall it is
//o(n) for the whole loop.
int percentage = counter / (array.len()); //It is being done in o(1).

o(1) + o(n) + o(1) = o(n)

 
 
       
       

Relacionados problema

61  Código más eficiente para los primeros 10000 números primos?  ( Most efficient code for the first 10000 prime numbers ) 
Quiero imprimir los primeros 10000 números primos. ¿Alguien puede darme el código más eficiente para esto? Aclaraciones: no importa si su código es inefici...

24  Seguimiento: "Clasificación" de colores por carácter distintivo  ( Followup sorting colors by distinctiveness ) 
Pregunta original Si tiene colores máximos y lejanos (y algunas métricas de distancia asociada), ¿puede idear una manera de ordenar esos colores en algún ...

3  Usando tamizado para la realidad aumentada  ( Using sift for augmented reality ) 
Me he encontrado con muchas bibliotecas / SDK / API de AR, todos ellos están basados ​​en marcadores, hasta que encontré Este video , de la descripción y los...

21  Obtener eficientemente obtener sumas ordenadas de una lista ordenada  ( Efficiently get sorted sums of a sorted list ) 
Tiene una lista ascendente de números, cuál es el algoritmo más eficiente que puede pensar para obtener la lista ascendente de sumas de cada dos números en es...

331  ¿Cuál es la forma más rápida de obtener el valor de π?  ( What is the fastest way to get the value of %cf%80 ) 
Estoy buscando la forma más rápida de obtener el valor de π, como un desafío personal. Más específicamente, estoy usando formas de que no impliquen el uso de ...

8  Fondo de partículas de WPF rápido  ( Fast wpf particle background ) 
Estoy construyendo una aplicación WPF y quiero que sus antecedentes se llenen con partículas con aleatorio: opacidad / z-orden tamaño Velocity " Fu...

12  Diseñando un sistema de calendario como Google Calendar [CERRADO]  ( Designing a calendar system like google calendar ) 
cerrado . Esta pregunta debe ser más enfocado . Actualmente no está aceptando respuestas. ...

3  Stl __merge_without_buffer algoritmo?  ( Stl merge without buffer algorithm ) 
¿Dónde puedo obtener una descripción de alto nivel decente del algoritmo utilizado en __merge_without_buffer() en el STL de C ++? Estoy tratando de reembols...

70  Función para crear ruedas de color [cerrado]  ( Function for creating color wheels ) 
cerrado . Esta pregunta debe ser más enfocado . Actualmente no está aceptando respuestas. ...

8  Cerca de algoritmos de clasificación - ¿Cuándo usar?  ( Near sorting algorithms when to use ) 
De vez en cuando, navegue por la web y busco algoritmos interesantes y datos para poner en mi bolsa de trucos. Hace un año, me encontré con la Soft Heap Est...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos