Me preguntaba si era posible encontrar el valor mediano de una matriz? Por ejemplo, supongamos que tengo una matriz de tamaño nueve. ¿Sería posible encontrar la ranura del medio de esta matriz?¿Encontrando el valor mediano de una matriz?
Respuesta
Suponiendo la matriz x se clasifica y es de longitud n:
Si n es impar, entonces el promedio es de x [(n-1)/2].
Si n es par que la mediana es (x [n/2] + x [(n/2) -1])/2.
Esto tomará tiempo de o (nlogn) al menos. – VishAmdi
vector<int> v;
size_t len = v.size;
nth_element(v.begin(), v.begin()+len/2,v.end());
int median = v[len/2];
en Java:
int middleSlot = youArray.length/2;
yourArray[middleSlot];
o
yourArray[yourArray.length/2];
en una línea.
Eso es posible porque en Java las matrices tienen un tamaño fijo.
Nota:3/2 == 1
Recursos:
En C++, puede utilizar std::nth_element
; ver http://cplusplus.com/reference/algorithm/nth_element/.
La respuesta Java anterior sólo funciona si hay es un ammount impar de números aquí es la respuesta que obtuve a la solución:
if (yourArray.length % 2 == 0){
//this is for if your array has an even ammount of numbers
double middleNumOne = yourArray[yourArray.length/2 - 0.5]
double middleNumTwo = yourArray[yourArray.length/2 + 0.5]
double median = (middleNumOne + middleNumTwo)/2;
System.out.print(median);
}else{
//this is for if your array has an odd ammount of numbers
System.out.print(yourArray[yourArray.length/2];);
}
y tenga en cuenta que esta es una prueba de concepto y de la mosca. Si crees que puedes hacerlo más compacto o menos intensivo, sigue adelante. Por favor, no lo critiquen.
Si desea utilizar cualquier biblioteca externa aquí es Apache commons math library utilizando puede calcular el Median.
Para más métodos y uso Tome mirar el API documentation
import org.apache.commons.math3.*;
.....
......
........
//calculate median
public double getMedian(double[] values){
Median median = new Median();
double medianValue = median.evaluate(values);
return medianValue;
}
.......
- Para más información sobre evaluar método AbstractUnivariateStatistic#evaluate
Calcular en el programa
En general, se calcula la mediana utilizando la siguiente dos fórmulas given here
Si n es impar, entonces Mediana (M) = valor de ((n + 1)/2) el término del elemento.
Si n es par entonces Mediana (M) = valor de [((n)/2) -ésimo término elemento + ((n)/2 + 1) -ésimo término elemento]/2
Es muy fácil ya que tienes 9 elementos (número impar).
Encuentra el elemento medio de una matriz.
En su programa se puede declarar gama
//as you mentioned in question, you have array with 9 elements
int[] numArray = new int[9];
entonces usted necesita para ordenar matriz mediante Arrays#sort
Arrays.sort(numArray);
int middle = numArray.length/2;
int medianValue = 0; //declare variable
if (numArray.length%2 == 1)
medianValue = numArray[middle];
else
medianValue = (numArray[middle-1] + numArray[middle])/2;
No hay otra alternativa - en general, las sugerencias aquí, o bien sugerir la clasificación de la serie después de tomar el mediana de tal matriz o confiando en una solución de biblioteca (externa). Los algoritmos de clasificación más rápidos en la actualidad son lineatmicos, en promedio, pero es posible hacerlo mejor que eso a los efectos del cálculo mediano.
El algoritmo más rápido para calcular la mediana a partir de una matriz no ordenada es QuickSelect, que, en promedio, encuentra la mediana en el tiempo proporcional a O (N). El algoritmo toma una matriz como argumento, junto con el valor int k
(la estadística de orden, es decir, el k-ésimo elemento más pequeño de la matriz). El valor de k
, en este caso, es simplemente N/2, donde N es la longitud de la matriz.
La implementación es un poco difícil de conseguir, pero aquí hay un ejemplo que se basa en la interfaz Comparable<T>
y Collections.shuffle()
sin dependencias externas.
public final class QuickSelectExample {
public static <T extends Comparable<? super T>> T select(T[] a, int k) {
if (k < 1) throw new IllegalStateException("Invalid k - must be in [1, inputLength].");
if (k > a.length) throw new IllegalStateException("K-th element exceeds array length.");
Collections.shuffle(Arrays.asList(a));
return find(a, 0, a.length - 1, k - 1);
}
private static <T extends Comparable<? super T>> T find(T[] a, int lo, int hi, int k) {
int mid = partition(a, lo, hi);
if (k == mid) return a[k];
else if (k < mid) return find(a, lo, mid - 1, k); // search left subarray
else if (k > mid) return find(a, mid + 1, hi, k); // search right subarray
else throw new IllegalStateException("Not found");
}
private static <T extends Comparable<? super T>> int partition(T[] a, int lo, int hi) {
T pivot = a[lo];
int i = lo + 1;
int j = hi;
while (true) { // phase 1
while (i <= hi && (less(a[i], pivot) || eq(a[i], pivot))) // is a[i] >= pivot?
i++;
while (j >= i && !less(a[j], pivot)) // is a[j] <= pivot?
j--;
if (i >= j) break;
exch(a, i, j);
}
exch(a, lo, j); // phase 2
return j;
}
private static <T extends Comparable<? super T>> boolean less(T x, T y) {
return x.compareTo(y) < 0;
}
private static <T extends Comparable<? super T>> boolean eq(T x, T y) {
return x.compareTo(y) == 0;
}
}
El código produce las siguientes estadísticas de orden para estas matrices de entrada:
" Input Array | Actual Output [format: (index k -> array element)] ", //
" | ", //
" [S, O, R, T, E, X, A, M, P, L, E] | [(1 -> A), (2 -> E), (3 -> E), (4 -> L), (5 -> M), (6 -> O), (7 -> P), (8 -> R), (9 -> S), (10 -> T), (11 -> X)] ", //
" [P, A, B, X, W, P, P, V, P, D, P, C, Y, Z] | [(1 -> A), (2 -> B), (3 -> C), (4 -> D), (5 -> P), (6 -> P), (7 -> P), (8 -> P), (9 -> P), (10 -> V), (11 -> W), (12 -> X), (13 -> Y), (14 -> Z)] " //
Hágalo en una línea como un profesional:
return (arr[size/2] + arr[(size-1)/2])/2;
fundido a una double
si estás esperando un double
, etc.
- 1. Java int [] [] matriz - iterando y encontrando el valor
- 2. Encontrar el valor mediano de un conjunto creciente
- 3. Encontrando la matriz de correlación
- 4. ¿Encontrando el valor mínimo del grupo máximo?
- 5. Ordenando un diagrama de caja basado en el valor mediano
- 6. ¿Encontrando una URL LDAP?
- 7. ¿Encontrando el valor de índice del número más pequeño en una lista?
- 8. ¿Comprende un algoritmo de selección mediano?
- 9. Encontrando el JRE en Windows
- 10. array_search() no encontrando el 0º elemento
- 11. ¿Encontrando el centroide de un polígono?
- 12. Tomcat startup.sh encontrando JAVA_HOME
- 13. ¿Encontrando el componente conectado más grande en un gráfico de matriz adj?
- 14. El establecimiento de un valor en una matriz multidimensional utilizando una matriz de claves
- 15. encontrando en ArrayList
- 16. Seleccione un valor aleatorio de una matriz
- 17. Valor más alto de una matriz asociativa
- 18. encontrando lapso dentro de este
- 19. Buscar el índice de un valor en una matriz
- 20. Encuentre el valor mínimo distinto de cero en una matriz
- 21. valor de Var en una matriz
- 22. Como llegar valor aleatorio de una matriz
- 23. Configuración de una matriz con un valor
- 24. Ordenar una matriz por el valor de una matriz secundaria en PHP
- 25. Crear una matriz con el valor duplicado de una matriz (PHP)
- 26. ¿Encontrando todos los lugares donde se ha establecido una variable?
- 27. Algoritmos OpenMp C++ para mínimo, máximo, mediano, promedio
- 28. ¿Cómo hace jQuery que el valor devuelto parezca una matriz?
- 29. Devuelve el índice del valor más alto en una matriz
- 30. ¿Cómo encontrar el valor mínimo en una matriz numpy?
Eso debería ser bastante trivial si sabes algo sobre el manejo de matrices. Tenga en cuenta que a menos que la matriz esté ordenada, la ranura del medio no es la mediana. ¿Es esta tarea? – teukkam
Java o C++? Elegir uno. Y "valor mediano" y "espacio intermedio" no son lo mismo, elija uno. – GManNickG