A2A
OK, me tienes riéndome de mí mismo.
Vi que me habían pedido que respondiera a esta pregunta, y de la pregunta en sí, tuve varias reacciones; en orden, fueron:
- ¿Cómo son útiles la estructura de datos y los algoritmos en el aprendizaje automático?
- ¿Cómo es la búsqueda tan rápida por los motores de búsqueda? Generan millones de instrucciones en menos de un segundo. ¿Qué algoritmo usan?
- Es un método de retroceso para imprimir permutaciones de cadena. No entiendo de qué manera se produce el flujo de control, como después de encontrar el intercambio, el intercambio se llama luego permutar y luego nuevamente. ¿Esto no se me viene a la cabeza?
- ¿Debo conocer algoritmos y estructuras de datos si quiero ser un desarrollador de pila completa?
- Además de la programación competitiva, ¿cómo aprender algoritmos?
- En realidad no uso pseudocódigo; la respuesta siempre está tan cerca del código real, que bien podría usar el código real; las personas usan pseudocódigo cuando quieren evadir una respuesta, en caso de que su respuesta realmente no se compile debido a errores de sintaxis
- ¿Por qué diablos quieren que documente Grand Central Dispatch en Mac OS X, ya que es más o menos un programador de espacio de usuario N: M estándar?!?!? Supongo que podría dar el algoritmo general sin intentar dar código …
- Verifiquemos los detalles de la pregunta para ver si agregan un comentario o algo … bueno, ahí está la etiqueta de programación, probablemente sea Grand Cen … ¡esperen, el mayor denominador común! ¡DIOS MIO! Jajaja
¡Las personas probablemente deberían evitar el uso de acrónimos matemáticos al hacer preguntas de programación de computadoras!
Intento expandir siempre mis siglas en el primer uso en las respuestas. Esto probablemente reduce mucho el humor involuntario al mismo tiempo.
Greatest Common Denominator (GCD) es una pregunta interesante desde una perspectiva de programación, porque requiere algunas matemáticas. Es cierto que una pequeña cantidad, si también describe lo que quiere ser encontrado.
La respuesta obvia es usar el algoritmo de Euclides. Es bastante fácil hacer una implementación recursiva simple, así:
int gcd (int x, int y)
{
if ((x * y)! = 0)
devuelve mcd (y, x% y);
devolver x + y;
}
Esta es una implementación bastante ingenua, y tiene varias limitaciones, que incluyen:
- tamaño de pila ilimitado
- límites de rango en x e y
- incluyendo que x * y puede provocar desbordamiento
…pero funciona.
También puede deshacerse del problema de la pila de manera bastante trivial desenrollando la recursión en iteración:
int gcd (int x, int y)
{
mientras que (x * y) {
si (x> = y)
x = x% y;
más
y = y% x;
}
devolver x + y;
}
Mejor, pero las limitaciones de rango / desbordamiento todavía están ahí.
También podría implementar el algoritmo euclidiano extendido, o incluso usar una tabla de cuadrados para implementar una función phi.
La parte más importante no es el pseudocódigo, o incluso el algoritmo específico, ya que generalmente hay varias formas de resolver cualquier problema.
La parte más importante de esta pregunta, suponiendo que sea una pregunta de entrevista, es que debe preguntar cuáles son las limitaciones.
Por ejemplo, ¿qué pasa si el entrevistador dice que no hay restricciones de alcance? Ahora está buscando usar una biblioteca BigNum.
Además: no use pseudocódigo: es vago.