随笔分类 -  算法导论

摘要:今天花了很长时间终于弄懂了这个算法……毕竟找一个好的讲解真的太难了,所以励志我要自己写一个好的讲解QAQ 这篇文章是在懂了这个问题n^2解决方案的基础上学习。 解决的问题:给定一个序列,求最长不下降子序列的长度(nlogn的算法没法求出具体的序列是什么) 定义:a[1..n]为原始序列,d[k]表示 阅读全文
posted @ 2016-08-06 00:05 lvmememe 阅读(38005) 评论(9) 推荐(26) 编辑
摘要:方法一:增量构造法 理解递归必须得理解函数到底是做什么的。 方法二:位向量法 枚举每一位选或者不选,复杂度比方法一略高但更好理解,因为与输出全排列思路差不多,满n位就输出。 缺点是输出不是按照字典序。 方法三:二进制法 稍加思考就会发现,方法二其实与二进制是对应的。 这个方法优点就是代码简单。 注意 阅读全文
posted @ 2016-07-30 13:23 lvmememe 阅读(6163) 评论(0) 推荐(2) 编辑
摘要:从上一篇开始应该就能感受到,其实既然环形的数据结构可以做出来,各种形状的数据结构都可以做出来,只要设计好节点的属性和节点之间的关系就行了。 用指针的实现会更加好理解,但是编程复杂度会相对更高,用数组实现,编程复杂度相对低,但是相对不那么直观。所以两种方式灵活选择吧。(不过用c++很多内置对象就可以... 阅读全文
posted @ 2016-01-14 18:42 lvmememe 阅读(373) 评论(0) 推荐(0) 编辑
摘要:今天这个又打了很长时间,本来觉得数据结构就是那样,不过是一种思维,但是实际上真正自己打和想象中差距还是很大,需要考虑到各种细节。 今天这个问题有一个比较有意思的应用,就是“约瑟夫环问题”。 具体可以参见百度百科:http://baike.baidu.com/link?url=poA1Aanlptc... 阅读全文
posted @ 2016-01-13 23:08 lvmememe 阅读(349) 评论(0) 推荐(0) 编辑
摘要:普通的链表队列和栈的实现差不多,只是修改一下进出的规则即可。(感觉自己就像在翻译算法导论的伪代码一样。。不过还好吧,也有一点自己的理解) 下面是代码:#include#includetypedef struct _node{ int num; struct _node *next;}n... 阅读全文
posted @ 2016-01-12 12:11 lvmememe 阅读(238) 评论(0) 推荐(0) 编辑
摘要:本来想假期再继续,结果发现写博客已经成了总结自己的一种习惯,所以还是继续写吧。 其实有一部分原因是今天英语考砸了。。哈哈,不管那些了,看来以后学习方式得改变一下,不能太功利,从简单开始,一点一点做好。 今天是队列的数组优化。昨天的队列有一个致命弱点,就是能盛放的数据数量越来越少,至于原因可以自己思... 阅读全文
posted @ 2016-01-11 21:22 lvmememe 阅读(327) 评论(0) 推荐(0) 编辑
摘要:把昨天提到的S.bottom简化之后又改了栈的链表。代码如下(已折叠):#include#includetypedef struct _node{ int num; struct _node *next;}node;node *s;void build(node *&S){ s=... 阅读全文
posted @ 2016-01-10 17:43 lvmememe 阅读(193) 评论(0) 推荐(0) 编辑
摘要:一直想做一个链表实现的栈,今天终于实现了。确实比数组要难多了,打了很久,很长时间花在了想象上(指针调试比较复杂。。)但是链表实现有一个最大的好处,就是动态分配内存,所以一般不会出现栈顶溢出的问题。值得一提的是代码中比昨天的多了一个build函数。建立一个新栈。那么init函数,还是初始化一个栈。昨天... 阅读全文
posted @ 2016-01-09 22:46 lvmememe 阅读(227) 评论(0) 推荐(0) 编辑
摘要:栈在暑假的时候接触过了,当时还写了个计算器,用的中缀表达式后缀表达式的栈操作。 http://www.cnblogs.com/itlqs/p/4749998.html 今天按照算法导论上的讲解规范了一下代码。主要是栈的初始化、判断空栈、入栈、出栈、遍历栈。#include#define MA... 阅读全文
posted @ 2016-01-08 22:43 lvmememe 阅读(221) 评论(0) 推荐(0) 编辑
摘要:刚整理完史纲期末复习资料,所以今天看的比较少,也不是很仔细。所以今天就只说一下自己的理解吧。 在最值选法讲完之后,书上又讲了选择算法,所谓选择算法就是选取中位数,更一般的,选取第k小的元素的算法。 实际上我理解的话,就是的排序算法思想的借鉴,书上的5个5个分的选中位数的没太看懂,这里就说两个我想的... 阅读全文
posted @ 2016-01-08 00:00 lvmememe 阅读(332) 评论(0) 推荐(0) 编辑
摘要:今天想做测试各个排序算法运行时间比较的程序,来对这几天学的排序算法小结一下。所以我先生成了1000000个1~150之间的随机数存到文件里。然后做了一个测试运行时间的程序。想看一下结构。但是结果效果并不太好。实践中,自己做的qsort函数和mergesort函数并没有理想中的那么快。结果是这样:(... 阅读全文
posted @ 2016-01-06 23:18 lvmememe 阅读(303) 评论(0) 推荐(0) 编辑
摘要:今天的这个比较神奇,是一个线性复杂度的排序算法O(n),算法导论在这一部分先证明了比较排序的复杂度下界是nlgn,所以基数排序不是基于比较的排序。 其实这种比较方法我们应该都接触过。假设输入的数都是三位以下的数(当然其他位数也可以,类比一下,这里就假设是三位数、两位数、一位数),那么只需要大致3n... 阅读全文
posted @ 2016-01-05 23:07 lvmememe 阅读(447) 评论(0) 推荐(0) 编辑
摘要:今天上最后一节史纲课,老师说不管什么学科,最重要的就是思想。我觉得很有道理。 好吧,不扯了。原谅我看书选择了速读策略,中间有很多感觉目前还很难看懂,以后有时间再细细学习。把略过去的在这里记一下。一、矩阵乘法算法。复杂度从n^3优化到了n^2.81 (数字比较神奇)。因为还没学线性代数,所以以后学了... 阅读全文
posted @ 2016-01-04 23:28 lvmememe 阅读(291) 评论(0) 推荐(0) 编辑
摘要:顶着期末复习的压力,还是在今天过完之前看完了一个算法——最大子数组问题。《算法导论》中引入这个问题是通过股票的购买与出售,经过问题转换(转换的过程比较简单,但是不好想),将前一天的当天的股票差价重新表示出来,即转为了一个最大子数组的问题 ,具体内容是: 13, -3, -25, 20, -3, ... 阅读全文
posted @ 2016-01-03 23:40 lvmememe 阅读(607) 评论(0) 推荐(0) 编辑
摘要:一、在归并排序中对小数组采用插入排序(放在上一篇里了);二、冒泡排序冒泡排序效率几乎是所有排序里最低的,但却很流行,就是因为它的编程复杂度也是最低的。大多数时候,效率还不及插入排序,其实冒泡排序、插入排序、选择排序基本上效果是差不多的(这个效果不是功能。。功能上讲肯定差不多啊都是排序),只是过程略有... 阅读全文
posted @ 2016-01-02 17:56 lvmememe 阅读(387) 评论(0) 推荐(0) 编辑
摘要:最近一段时间的博客都是记录我读《算法导论》的文字,虽然很厚,但是一点一点来吧,总有一天会看完的。虽然只看了几页,感觉收获还挺多的,原来懂了算法,却不一定能做出最好的代码(姿势很重要啊Orz。。),果然要跟着导论学习正确的姿势。2016.1.1 今天看了两个算法:插入排序和归并排序。代码如下(C语言... 阅读全文
posted @ 2016-01-01 22:25 lvmememe 阅读(588) 评论(0) 推荐(0) 编辑
摘要:这是个很经典的问题,但是我看了很多讲解都感觉不是很系统,但是受到了看的讲解的启发,在这里希望写一个比较严谨系统的讲解。 题目是这样的:在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个 阅读全文
posted @ 2015-12-03 23:39 lvmememe 阅读(690) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示