Escriba un programa para verificar si un elemento dado está en una matriz ordenada. ¿Cuál es su complejidad temporal?

Esta es una ligera modificación del algoritmo de búsqueda binaria. La complejidad temporal es [matemática] O (\ log_2 n) [/ matemática]
Explicación: Suponemos que la matriz es solo una matriz de enteros. Podemos convertir los índices de la matriz a un número entero e implementar un algoritmo de búsqueda binaria fácilmente.

Por ejemplo, considere la matriz:
Podemos escribir esto como [matemáticas] 5,6,8,17 [/ matemáticas] con índice [matemáticas] 0,1,2,3. [/ Matemáticas]

La función transform(int *) en el siguiente código convierte un índice de matriz como [math] [1,0] [/ math] en un índice de un solo dígito como [math] 2 [/ math].

La función reverse_transform(int) hace exactamente lo contrario.

 #include #include #define SIZE 4 #define s(n) scanf("%d", &n); // Right now, it is assumed that the matrix is a square matrix. Can be modified for further use if necessary int binary_search(int matrix[][SIZE],int*,int*,int); int transform(int *); int * reverse_transform(int); int main(void) { int matrix[SIZE][SIZE]; for(int i = 0; i < SIZE; i++) { for(int j = 0; j  high_int){ // Not here return -1; } else{ if(key < matrix[mid[0]][mid[1]]){ high_int = mid_int - 1; int * new_high = malloc(sizeof(int) * 2); new_high = reverse_transform(high_int); return binary_search(matrix,low,new_high,key); } else{ low_int = mid_int + 1; int * new_low = malloc(sizeof(int) * 2); new_low = reverse_transform(low_int); return binary_search(matrix,new_low,high,key); } } } int transform(int * val){ // Converts indices of a matrix to a single int // Example: Position [1,0] to 4. (in a 4x4 matrix) int ans; ans = (val[0] * SIZE) + val[1]; return ans; } int * reverse_transform(int val) { //Does the exact opposite of transform(int*) //Example Input: 10, Output: [2,2] int mult; mult = val/SIZE; int additive = val%SIZE; int * ans = malloc(sizeof(int) * 2); ans[0] = mult; ans[1] = additive; return ans; } 

More Interesting

¿Cuáles son algunas de las últimas preguntas de la entrevista de programación de Google?

¿Qué proyectos de codificación debe hacer uno si él / ella está solicitando Google, FB, Microsoft, Twitter, Amazon, etc.?

¿Cuál es su consejo para un graduado de CS que acaba de reprobar sus 12 entrevistas técnicas?

¿Cuáles son las preguntas más frecuentes en ASP.NET en una entrevista?

¿Puedo aprender algún lenguaje de programación en un día?

Cómo mejorar mis habilidades de lenguaje C para que si alguien me hace alguna pregunta sobre C, pueda tener la respuesta a esas preguntas particulares

¿Son fáciles las entrevistas de programación?

Al hacer una entrevista de codificación de pizarra y te quedas atascado, ¿está bien explicarle al entrevistador cómo usarías Google para encontrar una respuesta?

Cómo contar el número de formas únicas en una matriz que contiene muchas islas de 1s

¿Cuáles son las preguntas que se hacen en las entrevistas con desarrolladores PLSQL para personas con experiencia?

¿Cuáles son las preguntas de la entrevista HTML, CSS, JavaScript y jQuery para diseñadores U / UX?

Dada una matriz (N) de enteros, ¿cómo verifica si es posible obtener una suma de S, eligiendo algunos elementos (o cero) de la matriz y agregándolos?

¿Cuál es la mejor / (o peor) pregunta de la entrevista que le hayan hecho o que le hayan pedido un trabajo de programación o una pasantía (o una que esté poco relacionada con CS)?

¿Los entrevistadores solo preguntan sobre algoritmos y estructuras de datos para entrevistas de ingeniería de software?

¿Por qué no puedo conseguir un trabajo en algunos gigantes tecnológicos a pesar de que me va bien en las entrevistas? El tipo de puestos para los que entrevisto son nuevos ingenieros de posgrado / software. Siempre pido comentarios pero simplemente no responden.