算法(一)

目录

  1. 算法概述
  2. 算法数据结构
  3. 算法设计思想和典例
  4. 算法复杂度计算

1.算法概述

1、算法概念
算法是问题求解步骤的描述。
2、算法常用的设计策略

  • 迭代策略:是数值计算近似求解的算法。通过判断某个指标是否在误差范围内进行迭代计算得到结果。
  • 穷举策略:当问题的解有很多种情况时,逐一枚举进行求解。如密码箱求解。
  • 递推策略:当某种问题规模较小时容易得解,规模大不容易得解,但是具有明显得地推性质时使用的递推求解策略。如斐波那契数列求解问题。
  • 递归策略:当问题规模很大时,可以对问题进行分解成多个小问题,再进行归纳对大问题进行求解。
  • 回溯策略:在问题规模较小时进行求解,再逐步扩大问题规模。
  • 贪心策略:急于求成的策略,特别是时间。不求最优解,求出满意的解就可以了。如装箱子问题。
  • 分治策略、动态规划策略:感觉和递归策略类似,把问题进行分解,最后归纳求出大问题的解。

3.典例实现

1、递推经典算法斐波那契数列

头文件my_function.h:

//递推2经典算法:斐波那契数列求解问题
int fibonacci(int n);

函数实现文件my_febo.cpp:

#include <iostream>
#include "my_function.h"

int fibonacci(int n) {
	int num1 = 0;//数列第一个值
	int num2 = 1;//数列第二个值
	int num=0;//数列第N个值
	if (n == 0) {
		return num1;
	}
	if (n == 1) {
		return num2;
	}
	//递推求解斐波那契数列第N个值
	for (int i = 2; i <= n; i++) {
		num = num1 + num2;
		num1 = num2;
		num2 = num;
	}
	return num;
}

主程序:

#include <iostream>
#include<Windows.h>
#include "my_function.h"

#define NUM 5;

using namespace std;
int main()
{
    //递推经典算法:斐波那契数列求解问题
    cout << fibonacci(3) <<endl;

    system("pause");
    return 0;
}

2、分治汉诺塔

#include<stdio.h>
#pragma warning(disable:4996)
//汉诺塔函数
void hanoi(int n, char one, char two, char three)//将n块圆块借助第二根柱子转移到第三根
{
	void move(char x, char y);
	if (n == 1)
		move(one, three);
	else
	{
		hanoi(n - 1, one, three, two);
		move(one, three);
		hanoi(n - 1, two, one, three);
	}
}
void move(char x, char y)
{
	printf("\t%c->%c\n", x, y);
}

int main()
{
	int m;
	printf("Input the number of diskes:");
	scanf("%d", &m);
	printf("The step to move %d diskes:\n", m);
	hanoi(m, 'A', 'B', 'C');
	printf("press any key exit:");
	scanf("%d", &m);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值