- 博客(6)
- 收藏
- 关注
原创 背包问题算法
关于背包问题,其实可以分为两种类型:0-1背包问题(动态规划) 和 部分背包问题(贪心算法)。在这里仅介绍01背包。0-1背包问题:每件物品或被带走,或被留下,(需要做出0-1选择)。小偷不能只带走某个物品的一部分或带走两次以上同一个物品。在选择是否要把一个物品加到背包中,必须把该物品加进去的子问题的解与不取该物品的子问题的解进行比较。这种方式形成的问题导致了许多重叠子问题,满足动态规划的特征。部分背包问题:小偷可以只带走某个物品的一部分,不必做出0-1选择。总是选择每一磅价值 (Vi / Wi
2022-03-20 14:54:59 1335
原创 bfs搜索
广度优先搜索算法(英语:Breadth-First Search,缩写为BFS),又译作宽度优先搜索,或横向优先搜索,是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。广度优先搜索的实现一般采用open-closed表。算法步骤:1、首先将根节点放入队列中。2、从队列中取出第一个节点,并检验它是否为目标。 如果找到目标,则结束搜寻并回传结果。 否则将它所有尚未检验过的直接子节点加入队列中。3、若队列为空,表示整张
2022-03-20 14:40:35 220
原创 dfs深搜
深度优先搜索算法,又称DF深S(Depth First Search)。DFS算法是一种搜索算法,而搜索算法实质上是一种枚举,即借助计算机的高性能来有目的地枚举一个问题的部分情况或这个问题的所有情况,进而求出问题的解的一种方法。主要有两种实现方法:栈和递归什么是DFS?说白了就是一直遍历元素的方式而已,我们可以把它看成是一条小蛇,在每个分叉路口随意选择一条路线走,直到撞到南墙,才会调头返回到上一个分叉路口,走另外一条路,有时候运气很好,撞到了目标点,那么这个算法就结束了。void dfs(in
2022-03-20 14:31:08 183
原创 排序算法初识3
我们继续学习剩余的两种算法,快速排序和计数排序,另外简单介绍一下堆排序的实现。快速排序快速排序使用分治法策略来把一个串行分为两个子串行。快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。快速排序的名字起的是简单粗暴,因为一听到这个名字你就知道它存在的意义,就是快,而且效率高!算法原理1.从数列中挑出一个元素,称为 "基准";2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任
2022-03-19 18:23:49 1215
原创 排序算法初识2
在上一篇文章里,介绍了两种排序方法,冒泡以及选择,在这篇文章中会讲解两种排序方法,插入以及归并。插入排序插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法原理1.将第一个待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。2.从头到尾依次扫描未排序
2022-03-19 18:04:51 591
原创 排序算法初识1
冒泡排序冒泡排序是一种简单的排序算法,它需要重复的查找每个元素,两两比较,然后交换顺序,知道没有元素需要交换,排序完成。算法原理1.比较相邻的两个元素,如果前一个比后一个大,则交换顺序2.对每一对元素执行比较3.针对所有元素重复以上步骤原始代码如下void bubbleSort(int a[], int n){for(int i =0 ; i< n-1; ++i) { for(int j = 0; j < n-i-1; ++j) { if(a[j] > a[
2022-03-19 17:42:31 959
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人