算法
不叫大仁不姓李
别近视别近视别近视 球球了
展开
-
[c++]字符串匹配kmp算法
本来是想写一个split函数,暴力比较的,后来写完后加上了kmp算法(忽略一大堆头文件…在别的代码里写的…) #include <stdio.h> #include <sys/epoll.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #i...原创 2019-05-10 10:33:38 · 350 阅读 · 0 评论 -
[算法]算法学习03
迭代法 可以理解为“已知数列的递推公式求第n项”的问题,一般使用循环或者递归实现。最常见的例子比如递归求 n!。 递推公式为 A(n) = n * A(n-1) def f(n): if n==1: return n else : return n * f(n-1) 迭代法分为三部分: 1.迭代的结构(递归函数的结构) 2.变化的量(当前的参数n以及下一次迭代时候的n-1) 3.迭代...原创 2019-05-30 19:41:01 · 169 阅读 · 0 评论 -
[算法]算法学习06
狼羊草问题 建立全量的状态集合,以及状态转移的流程,从一种状态搜索到另一种状态,并不是很难。 24点计算器 问题是给定四个数字,检查能否通过在其中使用四则运算得到24. 通过枚举每种排列方式,然后枚举各种计算符号,以及枚举每种计算顺序可以得到结果。 这里我感觉可以有新的解法: 1.先对24质因数分解,并记录住分解后的下家。 2.然后遍历着从四个数字中取两个,看是否能通过四则运算得到分解后的结果。 ...原创 2019-06-12 18:55:39 · 157 阅读 · 0 评论 -
[算法]算法学习04(方程求解)
方程求解 二分法 对于任何连续函数,f(a)<0 f(b)>0 ,则在(a,b)中存在零点。 因此可以通过检查f((a+b)/2)的正负性来确定下一次迭代的区间。 推出条件即f((a+b)/2)==0,但是这是二分法逼近,难以达到浮点数的精确的值,因此只要判断区间小于无穷小即可。 const double PRECISION = 0.000000001; typedef double...原创 2019-06-01 16:40:55 · 2403 阅读 · 0 评论 -
[算法]算法学习05
穷举法 装配线与工作站问题 问题太长了就不粘了,大概就是这样一个有向图,每条边都有各自的权重,求起点到终点的最短路径。 起点为根节点建立树,其相邻一步到达的节点为子节点。搜索所有可行路径,记录到达终点的最小值。 用三个水桶等分 8 升水的问题 问题: 好莱坞电影《虎胆龙威 3》中,布鲁斯·威利斯饰演的纽约警探约翰·麦克莱恩被恐怖分子点名挑战,让他在指定的时间内完成各种危险指令,否则就威胁炸掉整个...原创 2019-06-01 17:46:22 · 162 阅读 · 0 评论 -
[算法]算法学习01
贪婪 可以理解为最简单基础的求解方式,特点是"短视性",从这个特点入手很容易理解每一步取其最优的原理。虽然最终结果不一定是最好的,但是一定是较好的而且是最简便的。 因此在不过分追求最优结果或者对速度的要求高于结果的情况下,贪婪是不错的选择。 分治 可以理解为大事化小小事好搞,与贪婪的每一步的"串联"不同,分治考虑的是分成每一部分处理。 常见就是二分查找与快排,因为涉及到二分,大部分为递归实现,且速...原创 2019-06-01 17:54:00 · 217 阅读 · 0 评论 -
[算法]算法学习02
动态规划 分四步,子问题结构,状态,状态转移方程,边界收尾。 重点在对于子问题的定义,以及状态的转移。 动规的题难有定式,日常积累些典型例题且学会解决问题的思考方式就好。 穷举 就是简单粗暴的一个个试。 有两个优化的点: 启发,例如每一个尝试都有响应概率,先可概率大的来。剪枝,根据某些条件判断出必不可能的点,从而减小穷举的范围。以上两种方法为策略方向入手。 结果方向入手,可以退而求其次,不一定到最...原创 2019-06-01 17:54:43 · 163 阅读 · 0 评论