摘要: 贪心算法,在每一步都求最优解,不理会以前的状态。 和动态规划的区别为,动态规划可以回溯,即理会以前的状态。 用下面的图可以理解(来自wiki pedia): A会一步一步到达m,而不是M。 算法: while 可以走向下一步;do 找到这一步的最优解 done 经典题目 1. 最大子序和 求max( 阅读全文
posted @ 2021-08-28 16:49 xuyv 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 链表 特点:节点之间可以相互连接。 每个节点的数据结构为:值,下一个节点。 经典题目 1. 合并两个有序链表 解法:迭代(也可以递归),构建一个哨兵节点prehead,维护l1和l2的指针,和结果链表的prev指针。 比较l1和l2的值,取出最小的节点(l1或者l2的指针后移),放入prehead后 阅读全文
posted @ 2021-08-28 15:14 xuyv 阅读(35) 评论(0) 推荐(0) 编辑
摘要: First In First Out 通常可以用来保存状态。 操作:入栈,出栈,获取顶部元素 典型题目: 1. 有效的括号 如果栈里没有匹配的括号,则将此括号入栈; 如果栈里有匹配的括号,则将匹配的括号出栈。 匹配的过程用查表法(哈希)。 2. 最小栈-单调栈 最小栈一般用来求:下个更大的元素在哪里 阅读全文
posted @ 2021-08-28 14:45 xuyv 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 查找表法 经典题目: 1.两数之和。 需要求得两数之和为X的数组a的索引i, j。 抽象来说,这是一个查找的过程。在索引i处,查找X - a[i]的索引j。 方法: 构建一个哈希表,key是数组的值,value是数组的索引。 接着遍历数组,然后在哈希表中找X - a[i]。找到,就返回i, j。 时 阅读全文
posted @ 2021-08-28 14:26 xuyv 阅读(353) 评论(0) 推荐(1) 编辑
摘要: 1. 全局公共子表达式 global common subexpression 2. 复制传播 3. 死代码消除 4. 代码移动 5. 归纳变量和强度消减 阅读全文
posted @ 2021-08-28 11:30 xuyv 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 窥孔优化 peephole optimiation 窥孔优化和局部优化类似,只不过窥孔优化的目标是已经生成的原始代码,即它对目标代码进行优化转换(transform)。 1. 冗余指令消除 2. 控制流优化 3. 代数化简 reduction in strength 4. 机器特有指令的使用 如 x 阅读全文
posted @ 2021-08-28 11:29 xuyv 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 局部优化:一个基本块(Basic Block)内的优化 1. CSE common subexpression elimination 当一个新节点M被加入DAG时,检查是否存在N,和M具有相同的运算符和子节点。如果存在,则可以用N替换M。 a = b + c和d = b + c 直接使用a = b 阅读全文
posted @ 2021-08-28 11:25 xuyv 阅读(283) 评论(0) 推荐(0) 编辑