基本算法概论

  基本算法主要分为以下四类:

1、子结构类算法:分治算法,贪心法,动态规划

子结构问题主要是要知道怎么从子结构问题的解推出现在问题的解,最粗糙的是简单递归,在递归的基础上进行改进就形成了分治、贪心和动态规划。

动态规划本质上只是减少了在递归过程中对子结构问题的重复求解,但是并没有缩小子结构问题的求解空间,所以有一些问题使用动态规划通常时间复杂度并没有减少到最小,这些问题通常需要更加巧妙的解法来实现最优的时间复杂度。

分治法着重于中间

1、动态规划着重从头尾考虑得到子结构

2、着重考虑从子结构推出现有结构,需要记录子结构值

贪心法着重于整体,找出最优

2、搜索类算法:回溯法,分支限界法 深度优先搜索 广度优先搜索

搜索类算法最粗糙的是暴力枚举,回溯法建立在深度优先搜索的基础上,分支限界法建立在广度优先的基础上(分支限界维护一个优先队列,按照广度优先扩展并计算优先值,然后放入优先队列中并选出最优点作为下一个扩展点)

搜索类算法主要需要明确是否能有序穷举解空间。

Dijkstra算法最好归结为分支限界,每次从队列中选择最短路径的最小值进行扩展

3、排序类算法:

冒泡、插入、选择

希尔、归并、堆、快排

计数、基数、桶

4、查找类算法:

遍历查找、二分查找

索引查找、哈希表

时间: 2024-07-31 17:29:53

基本算法概论的相关文章

《算法概论》第八章的一些课后题目 关于NP-Complete Problem

8.3 STINGY SAT STINGY SAT is the following problem: given a set of clauses (each a disjunction of literals) and an integer k, find a satisfying assignment in which at most k variables are true, if such an assignment exists. Prove that STINGY SAT is N

算法 - 算法概论

序言 Fibonacci 数列 多项式时间算法: var fib_arr = [0, 1]; function fib(n){ if(n == 0){ return 0; }else if(n == 1){ return 1; } for (var i = 0; i < n-2; i++) { fib_arr[n+2] = fib_arr[n+1] + fib_arr[n] } return fib_arr[n] } var start = new Date().getTime(); conso

【算法概论】0.序言

0.2 Fibonacci数列 一个指数算法,复杂度$T(n) \ge F(n) $ function fib1(n) if n=0:return 0 if n=1:return 1 return fib1(n-1)+fib1(n-2) 一个多项式算法 function fib2(n) if n=1:return 0 create an array f[0...n] f[0]=0,f[1]=1 for i=2...n: f[i]=f[i-1]+f[i-2] reutrn f[n] 原文地址:ht

266.算法概论(概念 特性 原则)

1.概念 1.1定义 算法是为了解决某类问题而规定的一个有限长的操作序列.?处理问题的策略 2.特性 算法五个重要特性?算法必须满足五个重要特性?算法五个要素的确切含义 1.有穷性 对于任意一组合法输入值,在执行有穷步骤之后一定能结束,?即:算法中的每个步骤都能在有限时间内完成.?算法与程序区别:程序没有有穷性 2.确定性   对于每种情况下所应执行的操作,在算法中都有确切的规定,?使算法的执行者或阅读者都能明确其含义及如何执行.?并且在任何条件下,算法都只有一条执行路径. 3.可行性 算法中的

算法概论

1.算法与数据结构的关系: (1)数据结构+算法=程序 数据结构是对数据的描述,算法是对数据的操作,因此:数据结构+算法=程序 算法侧重于对解决问题的方法的描述. 程序是对一个算法的具体实现. (2)联系: 数据结构是算法设计的基础. 算法的操作对象是数据结构. 数据结构设计主要是选择数据的存储方式,算法设计是在选择的数据结构基础上设计一个好的算法. 数据结构关注的是数据的逻辑结构.存储结构.基本操作,而算法关注的是如何在数据结构基础上解决实际问题. 2.算法设计的目标: (1)正确性:正确地执

算法概论第八章课后习题8.3

8.3 吝啬SAT问题是这样的:给定一组子句(每个子句都是其中文字的析取)和整数k,求一个最多有k个变量为true的满足赋值--如果该赋值存在.证明吝啬SAT是NP-完全问题. 证明: 补充一下SAT问题的概念:SAT问题是指是否存在一组对所有布尔变量的赋值(TRUE或FALSE),使得整个合取范式取指为真. 根据书本8.2章的定义:称一个搜索问题是NP-完全的,是指其它所有搜索问题都可以归约到它. 从定义可知,证明一个问题是NP-完全问题有两步,第一步是证明该问题是一个NP问题,第二步是证明其

算法概论课后习题8.8

题目:在精确的4SAT(EXACT 4SAT)问题中,输入为一组子句,每个子句都是恰好4个文字的析取,且每个变量最多在每个子句中出现一次.目标是求它的满足赋值--如果该赋值存在.证明精确的4SAT是NP-完全问题. 跟8.3题类似,要证明精确的4SAT问题是NP-完全问题分两步: 1.精确的4SAT问题是NP问题 2.通过证明某NP-完全问题可以归约为精确的4SAT问题 首先证明精确的4SAT问题是NP问题.同8.3类似,将一组值代入一个4SAT实例中需要多项式时间来验证解的真假,因此4SAT问

[算法作业] 算法概论8.3

STINGY SAT is the following problem: given a set of clauses (each a disjunction of literals) and an interger k, find a satisfying assignment in which at most k variables are true, if such an assignment exists. Prove the STINGY is NP-complete. 答: 因为ST

001 精弘论坛&amp;算法

(一)精弘论坛iOS客户端 很早就想做一个自己学校论坛的iOS客户端了.但是论坛(Discuz)没有API,是一个硬伤.高人指点的思路是:用cookies模拟电脑端在线,用HTTP GET的方式获取网页中的内容,用各种正则运算去获取HTML网页中的内容.然后解析之后展现到客户端上来.而发帖之类的操作,则是通过HTTP POST.当然这种方式的各种缺点当然非常明显. 模拟电脑端的客户端,流量消耗是显然的 复杂 :解析的不是JSON而是HTML 后续不便:论坛的各种参数随时会变更 尝试用Charle