Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

171
Vistas
Encontrar matrices únicas en una lista

Estoy creando un juego en el que los usuarios seleccionan de una lista de símbolos y luego identifican cuáles fueron esas selecciones.

Ejemplo:

Símbolos: [A, B, C, D, E, F, G]

El usuario selecciona [B, F, G] y esta matriz representativa [0, 1, 0, 0, 0, 1, 1] se guarda en la base de datos

Cuando un usuario replica correctamente una selección, me gustaría poder otorgar puntos de bonificación si la selección es única.

Por único quiero decir si la selección es lo suficientemente diferente de todas las selecciones anteriores. Lo que he considerado hasta ahora es comparar la matriz de selección de un usuario con todas las anteriores y verificar si la "varianza" es al menos un valor X

Ejemplo de selecciones anteriores:

  1. [1, 1, 0, 0, 0, 0, 0]
  2. [0, 1, 0, 0, 0, 0, 0]

Selección del usuario: [0, 1, 0, 0, 0, 1, 1]

compare la matriz de selección del usuario con cada anterior y encuentre cuántos índices difieren

 1) [0, 1, 0, 0, 0, 1, 1] [1, 1, 0, 0, 0, 0, 0] ---- variance = 3 2) [0, 1, 0, 0, 0, 1, 1] [0, 1, 0, 0, 0, 0, 0] ---- variance = 2

Para una variación mínima (X) de 3, este usuario no obtiene puntos de bonificación, pero para 2, sí.

¿Hay una mejor manera de pensar e implementar esto?

EDICIONES

Para aclarar. Voy a establecer la variación mínima en 3. Entonces, después de calcular la variación entre la regla de un usuario y todas las demás reglas existentes, si la variación mínima encontrada es mayor que 3, el usuario obtiene los puntos de bonificación; de lo contrario, no.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Tiene un conjunto de tamaño 7 --> [A, B, C, D, E, F, G] y solo puede tener 2^7 = 128 valores anteriores posibles para matrices representativas.

Tan pronto como tenga una consulta eficiente para seleccionar distintas matrices representativas de la base de datos, su algoritmo debería ejecutarse muy rápido, incluso si no es el mejor algoritmo de complejidad de tiempo. Puede que no valga la pena hacer que su algoritmo sea mucho más complejo, pero aquí hay una buena manera de encontrar la varianza después de hacer una new selection & previous selection : Cuente el número de 1 en representación binaria

En mi opinión, debe centrarse más en recuperar las representaciones de matrices distintas anteriores de la base de datos. Puede hacer esto creando un hash uniq de su representación y almacenándolo con la representación anterior. Para este problema, tiene una gran función para hacerlo, simplemente calcule el valor decimal de su representación como se muestra a continuación:

 0 = [0, 0, 0, 0, 0, 0, 0] = 0 * 2^0 + 0 * 2^1 + 0 * 2^2 + 0 * 2^3 + 0 * 2^4 + 0 * 2^5 + 0 * 2^6 1 = [1, 0, 0, 0, 0, 0, 0] = 1 * 2^0 + 0 * 2^1 + 0 * 2^2 + 0 * 2^3 + 0 * 2^4 + 0 * 2^5 + 0 * 2^6 . . . 127 = [1, 1, 1, 1, 1, 1, 1] = 1 * 2^0 + 1 * 2^1 + 1 * 2^2 + 1 * 2^3 + 1 * 2^4 + 1 * 2^5 + 1 * 2^6

Cuando seleccione valores distintos, le garantizará que no hará más de 128 comparaciones

about 4 years ago · Juan Pablo Isaza Denunciar

0

Creo que está buscando el operador XOR ^ y luego puede contar el número de "unos" para encontrar la varianza. No necesita almacenar una matriz en la base de datos, puede ser solo una columna de tipo INT simple.

En tu ejemplo:

 1) 0100011 -> 35 1100000 -> 96

Entonces en javascript podrías hacer:

 a = parseInt("0100011", 2); // it will give 35 (store only 35 as INT) b = parseInt("1100000", 2); // it will give 96 (store only 96 as INT) // later when you want to calculate variance varDec = a ^ b; // varDec = 67 varBin = varDec.toString(2) // varBin = "1000011"

Luego, debe contar el número de "unos" en su variable varBin . Hay pocas respuestas sobre SO con respecto a esto (es decir, ¿cómo encontrar el número de 1 en una representación binaria de un número? )

 variance = varBin.split('1').length-1; // variance = 3
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede que me esté perdiendo algo aquí, pero esto suena como un problema bastante simple. Necesitamos una función para calcular la cantidad de índices en los que los elementos de dos matrices no coinciden, llámela variance , y necesitamos una función que ejecute eso para una selección actual contra una lista de las anteriores y tome el valor mínimo, minVariance . Este fragmento tiene versiones bastante simples de ambos:

 const variance = (xs) => (ys) => xs .reduce ((c, x, i) => x == ys [i] ? c : c + 1, 0) const minVariance = (curr) => (prevs) => Math .min (... prevs .map (variance (curr))) const prevs = [ [1, 1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0], ] const curr = [0, 1, 0, 0, 0, 1, 1] console .log (minVariance (curr) (prevs))

Como han señalado otros, existen técnicas que pueden ayudarlo a ahorrar aún más en costos de almacenamiento, pero al final deberá comparar mapas de bits o números enteros, o convertirlos a las matrices que ya estaba planeando. Nuestra minVariance puede permanecer igual para aquellos, cambiando solo la variance simple.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda