实现对含有n个元素的单链表的逆转,要求运行时间O(n),除了链表本身所需空间外,只使用固定大小的存储空间。(此题来自《算法导论》10.2 7) 从头元素开始循环,将原本指向其后继节点的指针指向其前驱节点,直到循环至哨兵为止。整个过程额外需要三个指针变量的空间,分别保存当前节点及其前驱、后继。 下面是 ...
分类:
其他好文 时间:
2018-09-24 12:50:28
阅读次数:
172
用单链表实现一个栈,要求Push Pop的运行时间为O(1),来自《算法导论》习题10.2 2。 因为Push和Pop操作伴随着栈顶元素的插入和删除,所以,这个问题的本质是:在单链表的哪个位置进行插入和删除,其运行时间为O(1)?初步来看,可能的选项有两个,头部和尾部。 又因为,要想在单链表上插入和 ...
分类:
其他好文 时间:
2018-09-23 18:17:48
阅读次数:
459
插入排序(InsertSort)在<<算法导论>>里的描述相当贴切:插入排序非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是 ...
分类:
编程语言 时间:
2018-09-22 14:36:28
阅读次数:
144
1.描述:找出数组A的和最大的非空连续子数组,我们称这样的连续子数组为最大子数组。 2. 用分治策略来求解。 a. 假设我们要求A的子数组A[low, high]的最大子数组。根据分治策略,我们先将A[low,high] 平分 b. 那么 A[low,highj]的子数组A[i,j]只有三种可能 a ...
分类:
编程语言 时间:
2018-09-02 20:20:33
阅读次数:
186
最大子数组问题 本文只是做一个记录,更细致的思路请查看算法导论 最大子数组结构体 暴力求解 计算所有的数组区间的和进而得到最大的子数组,算法复杂度为θ(n2)。这种方法在小规模的数据表现很好,d但是在大规模数据中则很糟糕,但可用作分治算法的改进。实现的思路是先计算从以 为起始的最大子数组,然后从[1 ...
分类:
编程语言 时间:
2018-09-01 21:49:20
阅读次数:
212
补一补之前听课时候的题。 考虑使用dij算法求最短路,因为边权存不下,所以考虑用主席树维护二进制位,因为每一次都只会在一个位置进行修改,所以可以暴力进位,这样均摊复杂度是对的。 《算法导论》给了证明:对于一个有$k$位的二进制计数器,假设每一次都从第0位$+1$,那么我们发现执行$n$次加法之后,发 ...
分类:
其他好文 时间:
2018-08-31 14:07:53
阅读次数:
189
1.算法在计算中的作用 1.1算法 算法解决哪些问题 数据结构 技术,算法设计分析技术 难题,PE完全问题 并行性 1.2作为一种技术的算法 效率 算法与其他技术 2.算法基础 2.1插入排序 代码 图示 初始化:循环第一次迭代前为真 保持:某次迭代前为真,下次迭代之前仍为真 终止:循环终止时,不变 ...
分类:
编程语言 时间:
2018-08-30 21:04:53
阅读次数:
270
这个八月,总是充满了各种新奇; 技能方面: 1:首先是跟着同学,学习了一点健身知识;怕是对于自己来讲是受益最大的方面了; 久坐令自己一向自己的身体出现了肩膀,手腕都出现了相关的问题;通过健身游泳,缓解了不少, 同时也更加清楚的认识了自己身体的方方面面; 2:算法方面的学习; 算法方面 ,《算法导论》 ...
分类:
其他好文 时间:
2018-08-30 16:49:25
阅读次数:
134
关键是要实现什么~,算法是用来解决实际问题的。 编码、解码、哈夫曼算法(前缀编码无损压缩算法) 前人的经验还是牛逼哈。我们都是站在巨人的肩膀上 斐波那契数列 数据结构:队列,栈,链表,二叉树,红黑树, 贝叶斯定律(条件概率) 方差和标准差 矩阵操作(lua分解,拉格朗日公式) 多线程算法(在多核心C ...
分类:
编程语言 时间:
2018-08-30 02:02:14
阅读次数:
208
1. 分治法:分治模型在每层递归的时都有三个步骤: a.分解原问题为若干个子问题,这些子问题是原问题的规模较小的实例; b. 解决这些子问题,递归地求解各子问题的规模足够小,则直接求解; c. 合并这些子问题的解 成 原问题的解。 2. 归并排序算法完全遵循分治模式。 a. 分解:分解待排序的n个元 ...
分类:
编程语言 时间:
2018-08-26 20:07:48
阅读次数:
220