![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
每日算法15分钟
文章平均质量分 89
编程小白的逆袭日记
年近50仍然奋战在一线的软件工程师。25年软件行业从业经验,十多年软件项目经理经验,多年大数据分析团队经理经验。
喜欢数学,喜欢研究算法,喜欢探究,喜欢和志同道合的伙伴们交流。放弃内卷,在坡岛做一个快乐的程序员。
展开
-
[算法分析笔记]顺序统计和中值
1. 问题定义有nnn个元素的数组AAA,查找第kkk小的元素,即将数组按从小到大排序,排在第kkk位的元素。注意,这里只是要找到这个元素,并不要求将数组排序。首先,我们来看一下最朴素的求解问题的想法是什么?第一步,数组AAA按从小到大排序。第二部,顺序找到A[k]A[k]A[k]并返回。这个算法的算法时间复杂度:排序的时间复杂度+找到第k个元素的时间复杂度排序的时间复杂度+ 找到第k个元素的时间复杂度排序的时间复杂度+找到第k个元素的时间复杂度排序算法最优的时间复杂度已知是O(nlgn)O原创 2021-05-13 16:41:00 · 254 阅读 · 0 评论 -
[算法分析笔记]第一篇 分治法
分治法是非常基本但又极其使用的算法思想,在此对于该算法思想做个简单介绍。1. 分而治之第一步:将一个问题划分成多个子问题第二部:解决每一个子问题第三部:合并已解决的子问题这三条看起来是不是特别像废话,看完了还是不知道具体要怎么操作。确实如此,要理解分治法还是要从实际例子出发。接下来就介绍两个使用分治法思想的算法。2. 使用分治法思想的算法实例2.1 归并排序(merge sort)归并排序的基本思想就是将一个序列不断拆分直到单个元素,然后再两两合并且同时排序,直到最终合成一个完整的序列。原创 2021-05-06 00:02:22 · 134 阅读 · 0 评论 -
[算法分析笔记]最小生成树 (Minimum Spanning Tree)- 贪婪算法 (Greed Algorithm)
一. 复习图(Graph)的表示法GraphG=(V,E)Graph G=(V,E)GraphG=(V,E)VVV是所有的顶点的集合EEE是所有的连接顶点的边的集合, EEE无向图, EEE包含的边是没有方向性的。有向图,EEE包含的边是有方向性的。图的一些属性∣E∣=O(V2)|E|=O(V^2)∣E∣=O(V2)如果G是连通的,即从任意两个顶点之间有通路存在,∣E∣>∣V∣−1|E|>|V|-1∣E∣>∣V∣−1lg(∣E∣)=θ(lg(∣V∣))lg(|E|)原创 2021-01-02 15:39:06 · 557 阅读 · 0 评论 -
[算法分析笔记] 动态规划 (Dynamic Programming)- 最长公共子序列(LCS)
在开始讲动态规划之前,我们先来讲一个算法问题的实例,由此引出动态规划的一系列概念。最长公共子序列问题 (LCS)给定两个序列x[1…m]y[1…n]求他们最长公共子序列比如:X:ABCBDABX: A B C B D A BX:ABCBDABY:BDCABAY: B D C A B AY:BDCABA那么他们的最长子序列有 LCS(X,Y)=BDAB,BCAB,BCBALCS(X,Y)={BDAB, BCAB, BCBA}LCS(X,Y)=BDAB,BCAB,BCBA此处注意,最长子序列原创 2020-12-26 23:38:02 · 593 阅读 · 0 评论 -
[算法分析笔记] 竞争分析(Competive Analysis)
竞争分析的定义对于一种在线算法A, 如果存在一个常数K, 对于任何序列S的操作的成本, CA(S)<=α.Copt(S)+KC_A(S)<= \alpha.C_{opt}(S)+KCA(S)<=α.Copt(S)+K, 则我们可以称算法A为α\alphaα - 竞争的,此处,CoptC_{opt}Copt是最优算法的成本,又称上帝算法,假设该算法可以预见所有的后续操作并给出一个最优的算法。为了说明竞争分析的方法,我们要对一个在线算法进行分析,并证明该算法是α\alphaα - 竞原创 2020-12-26 00:18:04 · 1098 阅读 · 0 评论 -
[算法分析笔记] 平摊成本分析 (Amortized Analysis)的三种方法
什么是平摊分析?在分析一个对某序列的操作的成本时,我们会发现有些场合成本会比较低,而有些场合成本又会很高,平摊分析就是研究其每一趟操作的平均成本,而不关注于某一次的特定操作。平摊分析有以下几种分析方法:聚合分析会计分析势能分析聚合分析实例让我们通过动态表(Dynamic Table)的例子来学习聚合分析。动态表是一个哈希表(hash table)的实现方案, 其主要特征是动态的根据需要来增加表的空间, 适用于当我们初始时无法预知该表的长度。具体的操作步骤如下:初始状态表仅有一个元素原创 2020-12-24 21:24:44 · 2227 阅读 · 3 评论 -
[每日算法15分钟] 生成斐波那契数列第N项
算法分析是我最喜欢的课程之一。一个精妙的算法,犹如一杯香浓的咖啡,让人意犹未尽。算法代码,python。今天分享的这个算法是生成斐波那契数列第N项。斐波那契数列(Fibonacci sequence)F0=0,F1=1,F2=1,...,Fn=Fn−2+Fn−1F_0=0, F_1 = 1, F_2 = 1, ... ,F_n = F_{n-2}+F_{n-1}F0=0,F1=1,F2=1,...,Fn=Fn−2+Fn−1写一个方法def fibonacci(n) 生成FnF_nFn原创 2020-05-19 22:05:01 · 695 阅读 · 1 评论