Estoy estudiando para un examen y encontré esta pregunta que parece un poco complicada.O (n) Algoritmo para encontrar si 2 matrices tienen 2 elementos que se suman a un número
Deje A [1 ... n] y B [1 ... n] ser 2 matrices de números enteros de modo que cada elemento de A o B esté en el rango de 0 a m donde m = O (n). (estoy asumiendo que significa m < n?)
Necesitamos diseñar un O algoritmo (n) que encuentra dos elementos A [i] y B [j] de tal manera que A [i] + B [j ] = un número dado k. Si no existen, lanzamos un mensaje de error.
Ahora clasificarlos estaría fuera de la cuestión, ya que los mejores algoritmos de clasificación son O (n lg n).
Quizás use una tabla hash ... O simplemente cree una matriz más pequeña X de longitud m, de modo que cada índice cuente las ocurrencias de un número en A ... luego pasamos por B .. calcular diff = k - B [j ] .. y comprobar X [diff] .. si es mayor que cero, entonces sí, existe, entonces podríamos pasar por un nuevo para encontrar su índice ..
¿Qué piensan ustedes
Podría ser que se les permita preprocesar las matrices (pasando cualquier cantidad de tiempo, como 'O (n log n)'), y el requisito 'O (n)' en realidad solo se aplica a las consultas posteriores para diferentes valores de 'k'? – AnT
Hola. ¡Ya respondiste tu pregunta! Solo para el binning, o como dijiste "O simplemente crea una matriz más pequeña X ...". Eso será muy eficiente, fácil de implementar y es fácil ver que su tiempo de ejecución está en O (n). –
Me doy cuenta de que ... solo quería ver si las interwebs tenían una mejor solución ... pero gracias –