随笔 - 77  文章 - 1 评论 - 10 阅读 - 68831
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

随笔分类 -  算法

分支界限及其案例用途
摘要:分支界限(B&B Branch And Bound)也是一种编程范式,在离散组合性质问题上的最优解问题通常可以用分支界限方法进行求解,与回溯有相同之处,它也是枚举所有备选项,但是回溯是一种遍历所有可能解的结构,这种枚举通常是暴力型的,是不太聪明的枚举;分支界限是一种涡轮增压性的枚举(turbo-ch 阅读全文
posted @ 2021-11-07 19:28 Judy518 阅读(507) 评论(0) 推荐(0) 编辑
回溯算法及其案例用途
摘要:回溯算法是一种递归模式,它是一种暴力求解方法(brute force method),用于求出所有可能的解,回溯算法通常会构建一个状态空间树(state space tree), 将可能的组和从根到叶节点进行展开,然后以深度优先的方式搜索遍历状态树,遍历过程中遇到不符合解的节点立马返回进行新的遍历, 阅读全文
posted @ 2021-10-07 14:16 Judy518 阅读(496) 评论(0) 推荐(0) 编辑
动态规划及其案例应用
摘要:Wikipedia definition: “method for solving complex problems by breaking them down into simpler subproblems”,维基的定义看起来和分治算法相似,通过将一个复杂的问题分解成更简单的子问题来进行求解,但 阅读全文
posted @ 2021-10-02 18:03 Judy518 阅读(483) 评论(0) 推荐(0) 编辑
贪心算法及其案例用途
摘要:贪心算法(greedy algorithm):贪心算法的思想很简单,求解一个问题分为多个步骤,每次求解时总是做出在当前步骤来看是最优的解,在求解问题时,往往需要对给定的集合中的数据进行一次遍历,有时候一次遍历还可能找不出所需要的答案,这时候就需要进行多次遍历,每一次遍历其实就是一步求解,就是对下一个 阅读全文
posted @ 2021-09-21 12:10 Judy518 阅读(775) 评论(0) 推荐(0) 编辑
分治算法及其案例用途
摘要:分治算法也是一种重要的求解问题的思路,移用百科的定义,分治就是分而治之,就是将一个规模比较大的问题分解为几个规模较小的问题,这些规模较小的问题是相互独立的,但是它们与原问题性质相同,可以用相同的思路进行继续分解求解,最后将这些小规模的问题求解出的解合并起来作为原问题的解,故而分治算法的求解过程为: 阅读全文
posted @ 2021-09-20 21:04 Judy518 阅读(538) 评论(0) 推荐(0) 编辑
递归算法及其案例用途
摘要:递归(recursive)算法是一种循环调用自身来解决问题的思想,这是一中比较神奇的方法,你只要能口述循环调用过程,然后设定好基础情况(什么时候开始、什么时候结束),基本根据描述就可以将思路转换成代码,递归算法有以下条件组成: 1、递归开始和结束的基本条件(base case) 2、每次执行需要循环 阅读全文
posted @ 2021-09-20 15:17 Judy518 阅读(624) 评论(0) 推荐(0) 编辑
迭代法-二分迭代求解低阶线性方程
摘要:还是用迭代法求解一个方程题,f(x)=0,如果f(x1)<0,f(x2)>0,如果f(x)是连续的,则在x1和x2 之间一定有一个值x~,使得f(x~)=0。首先用步骤描述解题框架: 1、任意找两个点x1、x2,使得f(x1)<0,f(x2)>0 2、计算x1、x2的中间点的值mid=(x1+x2) 阅读全文
posted @ 2021-08-30 22:31 Judy518 阅读(192) 评论(0) 推荐(0) 编辑
迭代法-牛顿迭代法
摘要:迭代法在程序设计中也是一种常见的递推方法,即:给定一个原始值,按照某个规则计算一个新的值, 然后将这个计算出的新值作为新的变量值带入规则中进行下一步计算,在满足某种条件后返回最后的 计算结果;牛顿迭代法是用于多项式方程求解根的方法,在只有笔和纸的年代,这个方法给了人们一个 无限逼近多项式方程真实解的 阅读全文
posted @ 2021-08-29 23:22 Judy518 阅读(5049) 评论(0) 推荐(0) 编辑
排序之外部排序
摘要:有时,待排序的文件很大,计算机内存不能容纳整个文件,这时候对文件就不能使用内部排序了(这里做一下说明,其实所有的排序都是在内存中做的,这里说的内部排序是指待排序的内容在内存中就可以完成,而外部排序是指待排序的内容不能在内存中一下子完成,它需要做内外存的内容交换),外部排序常采用的排序方法也是归并排序 阅读全文
posted @ 2017-08-24 21:10 Judy518 阅读(20516) 评论(3) 推荐(2) 编辑
排序之选择排序
摘要:选择排序思想很简单:每次从待排序的子序列中选择最小的那个数据,将其插到已经排好序的序列中,算法描述如下: select_sort(A) 1、for i= 1 to length(A);//用算法描述的下标都是从1开始的 2、 min=temp=A[i]; 3、 index=i; 4、 for j=i 阅读全文
posted @ 2017-08-24 17:49 Judy518 阅读(166) 评论(0) 推荐(0) 编辑
排序之希尔排序
摘要:从刚开始本科学习数据结构的时候,对希尔排序就一直稀里糊涂的,弄不清到底怎么回事,重温知识,对此才稍加了解,希尔排序就是插入排序,不过它对插入排序进行了一些优化,我们之道,插入排序的性能与初始序列的排序状况有关,假设需要的排序效果是从小到达,如果给定的序列原本就是有序的,那么排序的时候只需遍历一遍数组 阅读全文
posted @ 2017-08-24 17:17 Judy518 阅读(145) 评论(0) 推荐(0) 编辑
排序之基数排序
摘要:基数排序也是一种不基于比较的排序方法,它的思想是这样的:假设有m个数据,先根据个位数大小对这m个数据进行排序,得到一个新的序列;然后根据十位数大小对这m个数据进行排序,又得到一个新的序列;然后再根据百位、千位,依次类推,直至最高位,最后得到的序列就是有序的序列。那么对每一位的排序是如何进行的呢?位排 阅读全文
posted @ 2017-08-24 12:03 Judy518 阅读(149) 评论(0) 推荐(0) 编辑
排序之计数排序
摘要:计数排序并非一种基于比较进行的排序,它是计算一个序列中的值在正常排好序中的序列所处的位置,怎么求解一个数的位置呢?就是利用下脚标进行求解,新建一个数组resu[],数组的长度要比序列中的最大值大1,数组中的值全部初始化为0,然后遍历原序列,将原序列的值i作为新建数组resu[]的下脚表,对resu[ 阅读全文
posted @ 2017-08-23 22:04 Judy518 阅读(125) 评论(0) 推荐(0) 编辑
排序之堆排序
摘要:堆是一种根节点和孩子结点具有某种关系的二叉树,具体可以分为大顶堆和小顶堆,其中大顶堆中的所有父结点的值比它的孩子结点的值要大,而左右孩子的值不做对比;反之就是小顶堆。 堆排序是根据堆的性质,进行反复的位置调换和堆调整的过程,要进行堆排序,首先就需要创建堆,这里选择创建大顶堆,创建大顶堆涉及到位置调整 阅读全文
posted @ 2017-08-23 20:03 Judy518 阅读(135) 评论(0) 推荐(0) 编辑
排序之归并排序
摘要:归并是将两个有序的序列归并为一个有序序列,在这里,“两个有序序列”是指同一个序列中含有两部分“有序”的子序列,我们要做的就是把这两个有序的子序列“合并”,使其整体成为一个有序的序列。为了做到这一点,我们可以创建一个和原序列大小相同的空间(这里用数组表示),然后通过两个指针同时扫描原序列中的两个有序的 阅读全文
posted @ 2017-08-22 17:13 Judy518 阅读(196) 评论(0) 推荐(0) 编辑
排序之快速排序
摘要:快速排序是综合性能非常好的一种排序方法,它的思想是:每次选取一个数,将序列中所有比该数据小的数放到一边,反之放到另一边,然后对该数据左边的序列和右边的序列分别利用相同的方法进行继续排序。同样,以数字序列5,3,2,1,4为例,分析快排的排序过程,根据描述可以初步得出排序过程,这里以一个表格的形式展示 阅读全文
posted @ 2017-08-21 17:42 Judy518 阅读(130) 评论(0) 推荐(0) 编辑
排序之插入排序
摘要:插入排序是将数据插入到已经有序的序列中,类似扑克玩家整理手中牌的顺序:刚开始玩家只有一张牌,一张牌没有可比性,认为是有序的,然后玩家又抽出一张牌,假设将面值大的插到后面,他会从后向前寻找位置,当找到合适的位置时就将牌插进去。这就是插入排序的原理,假设给定一个组数:5,3,2,1,4,这组数的插入排序 阅读全文
posted @ 2017-08-20 22:10 Judy518 阅读(137) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示