하노이 탑 64개 - hanoi tab 64gae

하노이 탑 64개 - hanoi tab 64gae

��Ʈ���� �ϳ��̿� ����� �ϳ� �ֽ��ϴ�. �� ������� ������ �ո� ���� �ٸ� ũ���� 64�� ���� ���ǰ� 3���� ���̾Ƹ�� ���븦 ����ϴ� ū ���� ������ �ֽ��ϴ�. �����µ��� �㳷���� ���� �ʰ�, ���ݵ� �� ������ Ǯ�� �ֽ��ϴ�.

�� ������...

  • ū �ͺ��� �Ʒ��� ���� 64���� ������ �ϳ��� ž�� �̷�� �ִµ�, �̸� ��� �ٸ� ���� �ϳ��� ���� �Űܾ� �մϴ�.
  • �� ���� �ϳ��� ������ �ű� �� ������, ū ������ ���� ���� ���� �ö� �� �����ϴ�.

64���� ������ ��� �Ű�����, ž�� ���, �����µ��� ��� ������ �Ǿ� ������鼭 ������ ������ ã�ƿɴϴ�.

�����...

1883�⿡ �������� �������� ���ξƸ� ��ī(Édouard Lucas)�� �ϳ��� ž ������ ��������ϴ�. � ���α� ������� �Ƕ�̵� ������ ������ ���� ���Ǿ����� �� �ִٴ� �������� ������ ����ٰ� �մϴ�. �ϳ��� ž ������ ���ݾ� ������ ���� �̾߱���� �ִٰ� �մϴ�.

���⼭ �ڹ� ���ø����� ������ ������ �� �� �ֽ��ϴ�. ó������ 3~4���� ���� ���� ���Ǻ��� �����ϴ� ���� ���մϴ�.

4���� ���ǿ��� ������ ���ô�.

하노이 탑 64개 - hanoi tab 64gae

�츮�� ������ ���ʿ� ���̴� ��� ���ǵ��� ������ ���� ����� �ű�� ���Դϴ�.

�׷��� �ϱ� ���� �������� �ݵ�� ���� ū 4�� ������ C�� �ű�� ������ ���Եǰ�����? �׷��� �� ������ � ���� ������ �÷����� �� ������ �� ���� A�� �ִ� 1~3�� ������ B�� �Űܳ��� �մϴ�.

하노이 탑 64개 - hanoi tab 64gae

������� �� �Ŀ��߸� A�� �ִ� 4�� ������ C�� �ű� �� �ֽ��ϴ�.

하노이 탑 64개 - hanoi tab 64gae

���� ���� �� ���� �����ϱ��? B�� �ִ� 1~3�� ������ C�� �ű�� ���Դϴ�.

하노이 탑 64개 - hanoi tab 64gae

�׷��� ���� �ϼ��Դϴ�.

�� �߰� ������ �� ����, �̰͸� �˷��ִ� �̴ϱ�? -_-

�׷����ϴ�. A�� �ִ� 1~3�� ������ B�� �ű�� ����� B�� �ִ� 1~3�� ������ C�� �ű�� ����� �˷����� �ʾҽ��ϴ�.

�� ������ �����Ƽ��� ����� ���� �̹� �����帰 ������� Ǯ �� �ֱ� �����Դϴ�. �ϳ��� ž�� Ǯ��� ������ �ٽ� ���� �ϳ��� ž�� Ǯ��� ������� ������ �� �ֽ��ϴ�.

���� �� A�� �ִ� 1~3�� ������ B�� �ű�� ����� ���캸�ڽ��ϴ�. 1~3�� ������ ������ ������ �������� �ʾƵ� �˴ϴ�. �ֳ��ϸ� ���� ���� �ִ� 1~3�� ���Ǻ��� ũ�� �����Դϴ�. ū ���ǵ��� �عٴ��̶� �����ϰ� ������ �����ô�. �׷� ���� Ǯ��� �� ������ �ٽ� ������ ���ڽ��ϴ�.

하노이 탑 64개 - hanoi tab 64gae

���ʿ� ���̴� ��� ���ǵ��� ������ ���� ����� �ű⼼��.

ó�� Ǫ���� �ߴ� ������ ���ؼ� ���캸����. ���� ���Ǵ� �Ȱ�����, ���� ���� �ٰ� ���� ��ġ�� �ٲ���ٰ� ���� �� �� �ֽ��ϴ�.

�׷��� B�� �ִ� 1~3�� ������ C�� �ű�� ����� �ٽ� ���� ������ ������ ���ô�.

하노이 탑 64개 - hanoi tab 64gae

���ʿ� ���̴� ��� ���ǵ��� ������ ���� ����� �ű⼼��.

�� ���� ������ ���� �� ���� ������� Ǯ� �� �ֽ��ϴ�. �׸��� ���� �������� ���� ���� 1���� �� �۽��ϴ�. �׷��� 1���� ������ �ű�� �ϳ��� ž ������ ����������? �̷� ������ ������ ��ǰ�� �����ڳ׿�.

�� ���� ������ �ű�� �ϳ��� ž ������ �� �� �ű�� ������ �ذ��� �� �ֽ��ϴ�.

���� ������ �����ؼ� ���������� ��Ÿ�� ���ô�.

  • 3���� ���븦 src, aux, dest�� �����մϴ�.

���� �ٸ� ���������� ���� ����Ű�� ���밡 �ٸ� �� �ֽ��ϴ�.

src : �Űܾ� �� ���ǵ��� �׿��ִ� �����Դϴ�. (source)

dest : ���ǵ��� ��ġ�ؾ� �� �����Դϴ�. (destination)

aux : ���� �� ���븦 ������ �����Դϴ�. (auxiliary)

������ ���� ���� ���븦 src, ������ ���� ���븦 dest�� ������ �� �ֽ��ϴ�.

  • n�� �� ������ ���� �����մϴ�.
  • ���ݵ鿡 1(���� ���� ����)���� n(���� ū ����)���� ��ȣ�� �ű�ϴ�.

���� n���� ���ݵ��� ���� src���� dest�� �ű�� ������ �����սô�.

  1. n-1���� ������ src���� aux�� �ű�ϴ�.
  2. 1���� ������ src���� dest�� �ű�ϴ�.
  3. n-1���� ������ aux���� dest�� �ű�ϴ�.

���� ������ ������� �˰������Դϴ�. ���� ��� �Լ��� ������ Ǯ� �� �ֽ��ϴ�. ������ Ǯ��� ����� ��� ���뿡 �ִ� ������ �ٸ� ����� �ű�� �������� �������� ����ϴ� ������ ��Ÿ����, ������ �̸��� ������ �� ���ڷ� �����ϰڽ��ϴ�.

�ϳ��� Ÿ���� Ǯ��� c �ڵ�

void hanoi_tower(char src, char aux, char dest, int n)

{

    if(n == 1) {

        printf("%c -> %c\n", src, dest);

        return;

    }

    hanoi_tower(src, dest, aux, n-1);

    hanoi_tower(src, aux, dest, 1);

    hanoi_tower(aux, src, dest, n-1);

}

3���� ���뿡 ���� A, B, C��� �̸��� �Ű��� �ְ�, 4���� ������ �̿��� �ϳ��� ž ������ Ǯ�� �ʹٸ�, �Լ� hanoi_tower(��A��, ��B��, ��C��, 4)�� ȣ���ϸ� �˴ϴ�.

hanoi_tower(��A��, ��B��, ��C��, 3)�� ȣ�� ������ ������ ��Ÿ���� ������ �����ϴ�.

하노이 탑 64개 - hanoi tab 64gae

Ʈ���� ���� �켱 Ž�� ������ �����ϴ�. ����ϴ�(�ű��) �κ��� ���������� ����˴ϴ�.

1�� ������ �ϳ��� ž�� �ذ��ϴµ� �ʿ��� ���� Ƚ��

T(1) = 1

n�� ������ �ϳ��� ž�� �ذ��ϴµ� �ʿ��� ���� Ƚ��

T(n) = 2T(n-1) + 1

       = 2(2T(n-2) + 1) + 1

       = 2^2 * T(n-2) + 2^1 + 2^0

       = 2^2 * (2T(n-3) + 1) + 2^1 + 2^0

       = 2^3 * T(n-3) + 2^2 + 2^1 + 2^0

       ...

       = 2^(n-1) + 2^(n-2) + ... + 2^1 + 2^0

       = 2^n - 1

�� ���� Ƚ���� ���� �ּ� �̵� Ƚ���͵� �����ϴ�.

��-�� ǥ����� �̿��� ��Ÿ���� �ð� ���⵵�� 2^n - 1 = O(2^n) �Դϴ�.

������ ������ ���� ã�ƿñ��?

���� �Լ��� �ſ� ũ�� �����ϴ� �Լ��Դϴ�. 64���� ������ �ű�� Ƚ����

2^64 - 1 = 18446744073709551615

�� ���ϰ� ū ���Դϴ�.

�������� ���� �ϳ� �ű�µ� �ɸ��� �ð��� 1�ʶ�� �սô�. 1�⿡ ��� 365.25���� �ְ�, 1���� 24�ð��̰�, 1�ð��� 60���̰�, 1���� 60�ʴϱ�

365.25 * 24 * 60 * 60 = 31557600

�������� 1�⿡ �� 31557600���� ������ �ű� �� �ֽ��ϴ�. ���� 64���� ������ �ű�µ�

18446744073709551615 / 31557600 = 584542046090.62639

�� 5845�� ���� �ɸ��ϴ�.

�׷��� �¾��� 46��� ���� Ȱ���ؿ� ������ ���̸� 50����� �� �¿� ���ᰡ �����ֽ��ϴ�. ������ �¾��� ����� ���� ���ſ� ���ҷ� �����ϴ� ������ �Ͼ�� ��Ǯ�� �����µ�, ������ ��ų �������� �ص��� Ŀ���ϴ�. ���� 50�� �Ŀ� �¾��� �����ż��� �Ǹ�, ������ ����ü(�Ǵ� ����)�� ������ �� ���� ���°� �ǹǷ� �����̶�� �� �� �ֽ��ϴ�.

1�ʿ� ������ 100���� �ű�� �κ��̶� �̿��Ѵٸ�, ���������� Ÿ�缺�� �ֽ��ϴ�.

�׷��� �� ������ ��ǻ�Ͱ� �ذ��Ϸ��� �󸶳� �ɸ����? ��ǻ�ʹ� ���� �ϳ� �ű�� ���꿡 1����ũ�� �ʰ� �ɸ��ٰ� �����ϸ�, �׷��� 58������ �ɸ��ϴ�.