¿Qué son los pseudocódigos para GCD?

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:

  • 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.

¿Asumo que está buscando el algoritmo de división euclidiana como pseudocódigo? Hay muchas formas de encontrar esto, incluso a través de una búsqueda básica en Google. Disfruta (ver página 1): http://people.cs.uchicago.edu/~l