![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
打好算法基础
愿行者无疆
这个作者很懒,什么都没留下…
展开
-
二分查找,改进-斐波那契查找
二分查找平均查找长度O(1.5logn),实现代码:// 二分查找算法(版本A):在有序向量的区间[lo, hi)内查找元素e,0 <= lo <= hi <= _sizetypdef int Rank;template <typename T> static Rank binSearch ( T* S, T const& e, Rank lo, Rank hi ) { while ( lo < hi ) { //每步迭代可能要做两次比较判断原创 2020-06-19 18:00:48 · 265 阅读 · 0 评论 -
广度优先
广度优先BFS核心思想:一般是用队列实现,这里要记录路径,队列不能用STL的queue或deque,要自己写。用一维数组实现,维护一个 队头指针和队尾指针。而bfs是是一层层展开(用head控制),比如说从第一个数0开始搜,然后把和0直接连接的数比如1,2,3都搜出来,加入队列,然后再把和1直接连接的搜出来,比如4,加入队列;然后再搜和2直接连接的,依次往下.简单的说就是一层一层的搜,每一条路径的搜索进度都是一样的(所以可以保证找到了就是最短的),因此需要用到队列的知识,不需要使用递归.因此dfs适原创 2020-06-10 17:14:03 · 116 阅读 · 0 评论 -
深度搜索
1、定义:从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不 了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”。其实称为“远度优先搜索”更容易理解些。因为这种策略能往前走一步就往前走一 步,总是试图走得更远。所谓远近(或深度),就是以距离起点的步数来衡量的。2.优化:1 可行性剪枝:往后看,看是否满足约束条件2.最优性剪枝:往前看,看当前点与曾经走过的点的最优值相比,大还是小3、伪码判断从V出发是否能走到终点:bool Dfs(V) { if( V原创 2020-06-08 12:11:01 · 2832 阅读 · 0 评论 -
二分算法
前提:待查找的数组有序核心:每次排除一半,时间复杂度为O(logn)二分查找函数写一个函数BinarySeach,在包含size个元素的、从小到大排序的int数组a里查找元素p,如果找到,则返回元素下标,如果找不到,则返回-1。要求复杂度O(log(n))注:取中点元素int mid = L+(R-L)/2;可防止(L+R)/2,太大溢出;’int BinarySearch(int a[],int size,int p) { int L = 0; //查找区间的左端点 int R =原创 2020-05-30 10:00:54 · 110 阅读 · 0 评论 -
递归
1、递归的作用1) 替代多重循环2) 解决本来就是用递归形式定义的问题3) 将问题分解为规模更小的子问题进行求解 ....原创 2020-05-24 09:50:32 · 79 阅读 · 0 评论