Me gustaría tener su opinión sobre la dificultad de la siguiente pregunta de la entrevista:
Encuentre el subconjunto contiguo con suma máxima en una matriz de enteros en tiempo O (n).
Este problema de sonido trivial se hizo famoso por Jon Bentley en sus Perlas de programación, donde lo usa para demostrar las técnicas de diseño de algoritmos.
En una escala de 1-10, siendo 1 la prueba FizzBuzz (o HoppityHop ) y 10 implementando la función C stdlib malloc (), ¿cómo calificaría el problema anterior?
Creo que las personas que mejor pueden responder a esta pregunta son las que han leído Programming Pearls y han tratado de resolver este problema por su cuenta. Para motivar a aquellos que no lo han hecho, 'Programming Pearls' aparece muchas veces en la lista de 'Los 10 mejores libros de programación'.
Un par de comentarios pueden ayudar a obtener una mejor calificación:
Implementar malloc () no es tan formidable como parece. Consulte el lenguaje de programación C de K&R, por ejemplo. A veces se le pregunta en Microsoft .
Observación de CLRS sobre resolución de problemas: a menudo es más difícil resolver un problema desde cero que verificar una solución claramente presentada, especialmente cuando se trabaja con limitaciones de tiempo .
fuente
Respuestas:
Eso realmente depende del desarrollador.
Si malloc tuviera 10, entonces calificaría este problema como 20. Pero, nuevamente, he hecho malloc antes y probablemente podría hacerlo nuevamente.
Alguien que haya solucionado este problema o conozca el algoritmo apropiado de la parte superior de su cabeza lo convertirá en 5 y malloc () en 10.
El problema con este tipo de preguntas es que si las ha hecho antes son fáciles y esto es realmente una prueba de si ha visto este algoritmo anteriormente. Por lo tanto, no me gustan para las entrevistas.
Ahora, para las pruebas en las que le das al desarrollador un par de días, es una prueba perfectamente buena porque si no conocen el algoritmo, entonces les das la oportunidad de investigar y ponerse al día y es una prueba no solo su conocimiento pero su habilidad para obtener nuevos conocimientos.
fuente
Supongo que la calificación debería ser bidimensional, al menos. FizzBuzz-
malloc
describe el rango en un eje, yo lo llamaría "complejidad tecnológica". Pero esta dimensión única ciertamente no es suficiente para describir el problema. Para resolver el problema en cuestión, el desarrollador debe pensar más que el código , mientras que la implementaciónmalloc
requiere más disciplina de codificación que la creación de algoritmos complejos.Así que así es como arreglaría estos problemas:
Para ilustrar mi punto, agregué un orden de fusión paralela a la trama, ya que, supongo, es un buen ejemplo de tarea sofisticada tanto tecnológica como algorítmicamente.
fuente
Creo que es considerablemente más difícil que FizzBuzz o HoppityHop: esos dos no son más que un simple caso de cambio o un caso de cambio en un bucle.
La submatriz máxima requerirá un análisis más profundo del problema subyacente: no es algo que esperaría ver en una clase de programación para principiantes, ya que requiere habilidades matemáticas más altas que un problema de tipo FizzBuzz. Este problema tiene una sensación similar al problema de la ruta más corta, que se resuelve con el algoritmo de Dijkstra, tal vez es una especialización del problema de la ruta más larga .
En su escala del 1 al 10, probablemente lo calificaría entre 3 y 5.
* Mientras el servidor estaba inactivo, descubrí que el problema de subarrays máximo tiene su propia página en wikipedia.
fuente
Le doy un 3. Más allá de la mayoría de los programadores que he entrevistado, pero es un problema fácil para aquellos que recomendé contratar.
fuente