Divide e algoritmo de conquistar e as Torres de Hanói

Divisão e conquista

  1. Dividir para conquistar é um algoritmo importante. interpretação literal é "dividir para reinar" é para um problema complexo em dois ou mais dos mesmos ou similares sub-problemas , então sub-problemas em pequenos sub-problemas ...... até os últimos sub-problemas podem ser simplesmente resolvida diretamente a solução combinada é a solução que é a criança problema do problema original. Esta técnica é a base para muitos algoritmos eficientes, como algoritmo de classificação (rápida tipo, merge sort), transformada de Fourier (Fast Fourier Transform) ......
  2. Alguns do algoritmo dividir e conquistar clássico pode resolver o problema da

    Binário busca
    grande inteiro multiplicação
    tabuleiro de xadrez cobrindo
    merge sort
    rápida tipo
    de tempo linear para escolher
    o ponto mais próximo sobre a questão
    round robin programação
    HANOR

  • algoritmo de partição passos
    dividir e conquistar tem três etapas em cada recursão camada:
  1. Decomposição : o problema original em um número de menor, independentes um do outro, o mesmo que o problema original sob a forma de sub-problemas
  2. Resolver : se os pequenos sub-problemas facilmente resolvidos abordadas diretamente, solução recursiva para os vários sub-problemas
  3. Mesclar : O de-fusão de cada soluções sub-problema para o problema original
  • Partition (Divide-and-Conquer§) seguinte algoritmo padrão de design

    SE | P | ≤n0
    o retorno, em seguida, (ADHOC§)
    // P será dividida em pequenos sub-problemas P1, P2, ..., Pk
    para i ← 1 a k
    fazer yi ← Divide-and-Conquer (Pi) recursivamente resolver Pi
    T ← mERGE (y1, y2, ..., yk) merge sub-problema
    de retorno (T)

    Onde | P | P representa a escala do problema; n0 é um valor limite que indica o momento em que a escala do problema P não deve exceder n0, o problema foi resolvido diretamente e facilmente, sem a necessidade de continuar a quebrar. ADHOC§ é o algoritmo básico da sub-dividir e conquistar, solução direta para os problemas de pequena escala P. Portanto, quando o tamanho de resolver ADHOC§ P não exceda n0 directamente algoritmos. Algoritmo MERGE (y1, y2, ..., yk) é um sub-algoritmo do método de sub-terapêutica combinada para subproblems P é P1, P2, ..., y1 Pk da respectiva solução, y2, ..., yk é o combinado P solução.

Torre de problema Hanoi

  • Torre de Hanoi Legend

    Torre de Hanói: Torre de Hanói (também conhecida como a Torre de Hanói) problema decorre de uma antiga lenda indígena de brinquedos educativos. Quando Brahma criou o mundo para fazer três pilares de diamante, da pilha-se inferior com 64 discos de ouro por ordem de tamanho a um poste. comandar Brahma Brahman para o disco, a fim de tamanho a partir do fundo novamente colocada sobre as outras colunas. E predeterminado, o disco pode não ser alargada em um pequeno disco, um disco só podem ser movidos entre os três pilares.

    Se uma vez por segundo, totalizando Quanto tempo faz? conclusão turno destas peças de ouro exigir mais de 584.554 bilhões de anos, a expectativa de vida do sistema solar também está a ser dito dezenas de bilhões de anos. Realmente mais de 584.554 milhões ano, toda a vida na Terra, juntamente com as torres do Vaticano, templos, etc., já desapareceu.

Torre de Hanoi lenda acima referido real é o problema, como mostrado:
Aqui Insert Picture Descrição
Requisitos :
disco 1. Uma coluna coluna B ou C todos movidos para a coluna
só pode ser movido entre um disco 2. As três colunas
2. pequena rodada disco no disco não podem ser ampliados

Nós olhamos para idéias para resolver as Torres de problema Hanoi :

De acordo com a idéia de dividir e conquistar algoritmo, nós dividido em vários problemas complexos mais fácil de resolver problemas menores.

  1. Podemos supor que uma torre em apenas um disco, o disco diretamente para a torre A se mudou para o C: AC

  2. Um disco coluna do princípio de que o número n> = 2, que pode sempre ser visto como dois discos, isto é, um disco inferior, e os restantes de cima do disco, como um disco

    1. A camada superior primeiro disco A-> B
    2. Na placa inferior A-> C
    3. Finalmente, toda a coluna B a partir do disco B-> C

    Como pode ser visto acima, não importa quantos discos, desde que o seu número é maior que 1, que pode ser dividido em três acima.

implementação de código :
Torre de código de Hanoi é muito simples, a chave é entender o seu pensamento

public class Hanoitower {

    public static void main(String[] args) {
        hanoitower(5, 'A', 'B', 'C');
    }

    /**
     * @param num 盘的数量
     * @param a a柱
     * @param b b柱
     * @param c c柱
     */
    public static void hanoitower(int num, char a, char b, char c) {
        // 如果只有一个盘,直接从A移动到C柱
        if (num == 1) {
            System.out.println("第一个盘从" + a + "->" + c);
            return;
        }
        if (num >= 2) {
            // 如果大于或者等于2个盘,我们看把盘看成最下面的一个盘,和上面的盘
            // 1. 先移动上面的盘到B即,A->B
            hanoitower(num - 1, a, c, b);
            // 2. 在把最下面的一个盘从A移动到C
            System.out.println("第" + num + "个盘从" + a + "->" +  c);
            // 3. 最后把B中的盘移动到C
            hanoitower(num - 1, b, a, c);
        }
    }
}
Publicado 83 artigos originais · ganhou elogios 3 · Vistas 9818

Acho que você gosta

Origin blog.csdn.net/fyj13925475957/article/details/104745821
Recomendado
Clasificación