算法
记录自己的学习过程
胖胖的懒羊羊
努力成为一名优秀的开发者。
很高兴,能够遇见你️
展开
-
【第六周】算法之动态规划(一)
目录例题一:数字三角形例题二:最长上升子序列例题三:最长公共子序列 例题一:数字三角形 题目描述: 解题思路: 这也是一个递归的问题,把每一步都按照最优的解法算,三角形用二维数组存储 解题思路: #include <iostream> #include <algorithm> #define MAX 101 using namespace std; int D[MAX...原创 2020-04-10 21:20:56 · 286 阅读 · 0 评论 -
【第五周】算法之分治算法
分治算法一:分治的基本概念例题一:归并排序例题二:快速排序例题三:输出前m大的数 一:分治的基本概念 把一个任务,分成形式和原任务相同,但规模更小的几个部分任务(通常是两个部分),分别完成,或只需要选一部分完成。然后再处理完成后的这一个或几个部分的结果,实现整个任务的完成。 例题一:归并排序 题目描述: 解题代码: #include<iostream> using namespa...原创 2020-04-04 22:05:50 · 254 阅读 · 0 评论 -
【第四周】算法之二分算法
二分算法1.引言2. 二分查找函数 1.引言 问题:A心里想一个1-1000之间的数,B来猜,可以问问题,A只能回答是或否。怎么猜才能问的问题最少? 是1吗?是2吗?…是999吗?这样猜平均要问500次 大于500吗?大于750吗?大于625吗?…每次缩小猜测范围到上次的一半,只需要10次 这样就得出了我们的二分算法,二分算法就是每次缩小一半的范围来确定查找的数值,这样会节省查找时间,优化...原创 2020-03-28 22:11:33 · 265 阅读 · 0 评论 -
【第三周】算法之递归二
例题一:爬楼梯 解题思路 1.假设现在已经是到达了楼梯顶端,但现在可能是从n-1阶上来的,也可能是从n-2阶上来的,所以有f(n)=f(n-1)+f(n-2) 解题代码: #include<iostream> using namespace std; int N; int stairs(int n) { if(n<0) return 0; if(n==0) ...原创 2020-03-23 20:59:03 · 259 阅读 · 0 评论 -
【第二周】算法之递归
递归:一个函数调用其自身,就是递归 递归的作用: 替代多重循环 解决本来就是用递归形式定义的问题 将问题分解为规模更小的子问题进行求解 例题一:求n!的递归函数 int Factorial(int n) { if(n==0) return 1; else return n*Factorial(n-1); } 例题二:汉诺塔问题 思路:若想把n个盘子移到...原创 2020-02-22 21:52:37 · 280 阅读 · 0 评论 -
【第一周】算法之枚举
枚举:基于逐个尝试答案的一种问题求解策略 例题一:完美立方 解题思路: 看看N以内有多少四种组合,每个都试一遍 四重循环枚举a,b,c,d,a在最外层,d在最里层,每一层都是从小到大枚举, a枚举范围[2,N] b范围[2,a-1] c范围[b,a-1] d范围[c,a-1] 答案 #include<iostream> #include<cstdio> using n...原创 2020-02-20 19:51:36 · 1371 阅读 · 0 评论 -
算法开端
编程语言有很多,但也只是一个工具而已,重要的是解决问题的方法清晰的出现在我们的脑子里,然后用一种编程语言把它描述出来 算法的5个特性 有穷性(Finiteness) 算法的有穷性是指算法必须能在执行有限个步骤之后终止; 确切性(Definitness) 算法的每一步骤必须有确切的定义; 输入项(Input) 一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0...原创 2019-11-25 21:33:12 · 361 阅读 · 0 评论