算法3

作者: 无端飞溅 | 来源:发表于2018-11-01 15:34 被阅读0次

递归算法示例

逆序一个正整数

https://github.com/terrellhu/algorithm/blob/master/20181029/reverse.cpp

void reverse(uint64_t n)
{
    cout << n%10;
    if (0 != n/10)
    {
        reverse(n/10);
    }
    return;
}

书上的代码示例有问题,只有输出,没有递归的部分,应该是印刷错误吧。。

汉诺塔

经典的汉诺塔问题,三个规则:

  1. 每次只能移动一个圆盘
  2. 圆盘可以加到塔座X,Y,Z中任意一个上
  3. 任何时刻都不能将一个较大的圆盘放在较小的圆盘之上

最直观的想法,塔的数据结构类似栈,即使用3个栈将1个栈的元素按原顺序移动到另一个栈

  • 汉诺塔递归算法理解
    1. 不要尝试理解整个递归的具体过程
    2. 简化过程为一个简单的递归过程
#include <iostream>
#include <stack>

using namespace std;

class CTower{
public:
    string name;
    stack<int> content;
};


void hanoi(int n, CTower& x, CTower& y, CTower& z)
{
    if (n)
    {
        hanoi(n-1, x, z, y);
        y.content.push(x.content.top());
        x.content.pop();
        cout << "move " << x.name <<"." << n << " to " << y.name << endl;
        hanoi(n-1,z,y,x);
    }
    return;
}

https://github.com/terrellhu/algorithm/blob/master/20181029/hanoi.cpp
以递归的思路来理解,即1~n个盘,要将最下面的n号盘移到y塔,则先要将1~n-1个盘都移到z塔,然后将第n个盘移到y塔后,再将1~n-1个盘移回到y塔,即完成!

产生各种可能的排列
  • 给定n个自然数,{0, 1, ~n-1}的集合,设计一个算法输出该集合所有可能的排列。
#include <iostream>

using namespace std;

template < class T >
void perm(T a[], int k, int n)
{
    if (k == n-1)
    {
        for (int i =0; i < n; ++i)
            cout << a[i];
        cout << endl;
    }
    for (int i = k; i < n; ++i)
    {
        T t = a[i];a[i] = a[k];a[k] = t;
        perm(a, k+1, n);
        a[k] = a[i];a[i] = t;
    }
    return;
}

int main(int argc, char** argv)
{
    if (argc < 4)
    {
        cerr << "proc number1 number2 number3..." << endl;
        return 0;
    }

    uint64_t a[argc-1] = {0};
    for (int i = 1; i < argc; ++i)
    {
        a[i-1] = strtoul(argv[i], NULL, 0);
    }
    perm(a, 0, argc-1);
}

这里虽然把代码写出来了,但是感觉还是无法真正理解递归的思想,如果来一个新题目,不一定能做出来,留个坑,后面多找一些递归的算法题来练习一下。

相关文章

  • 决策树简记

    具有不同划分准则的算法决策树原理剖析及实现(ID3)理解决策树算法(实例详解)-ID3算法与C4.5算法 ID3(...

  • 玩转算法面试(一)

    1算法面试意义 2 3 4 优化算法

  • 「数据分类」14决策树分类之CART算法

    1.CART算法与ID3算法对比 (1)CART算法解决了ID3算法的不足,既能用于分类问题,又能用于回归问题。 ...

  • 算法学习3_枚举

    枚举算法又称穷举算法枚举算法的核心思想 : 有序的尝试每一种可能 题一、 3 * 6528 = 3 * 8256 ...

  • 垃圾收集算法

    1.标记-清除算法 2.复制算法 3.标记-整理算法 4.分代收集算法

  • 机器学习算法

    算法常见分类 有监督算法 KNN ID3 无监督算法 Apriori Kmens 其他算法 算法:计算机解决特定问...

  • 简单基础知识

    算法 3道 (只用了一种方法,每篇会有3题) //1.考察闭包 //2.考察算法 求最大值 //3.考察算法 出...

  • 19-SIM数据交互之-鉴权算法

    GSM网络的鉴权采用的是Comp128-1/2/3算法,又称A3A8算法,而2G的CDMA采用的是CAVE算法,3...

  • c4.5

    C4.5是机器学习算法中的另一个分类决策树算法,它是基于ID3算法进行改进后的一种重要算法,相比于ID3算法,改进...

  • 分类决策树算法

    C4.5是机器学习算法中的另一个分类决策树算法,它是基于ID3算法进行改进后的一种重要算法,相比于ID3算法,改进...

网友评论

      本文标题:算法3

      本文链接:https://www.haomeiwen.com/subject/mukltqtx.html