随笔分类 -  算法研究

普林斯顿大学算法公开课(2)----并查集
摘要:并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。 Dynamic connectivity: (1)Find query,检查两个物体是否在一个单元中。 (2)Union command,连接2个单元,使得这个单元包含这两个物体。 Quick find:id[p] is p的单元id (1)Find:p and q索引的id是否相同。 (2)Union:合并p=q,则要合并所有条目的id=id[p],id=id[q]。 Quick Union:id[p] is p的i的父节点 (1)Find:检查p和q是否有同一个root。... 阅读全文

posted @ 2013-09-08 20:16 板栗小羊 阅读(654) 评论(0) 推荐(0) 编辑

普林斯顿大学算法公开课(1)----介绍
摘要:课程概况这个课程是什么?(1)中级研究课程。(2)编程解决问题。(3)算法:解决问题的思路方法。(4)数据结构:存储信息的方法。课程分为两个部分为什么学习算法?算法的影响力是宽广和深远的。影响的领域不完全列表如下。(1)网络。包括搜索,包路由,分布式共享文件。(2)生物。包括基因工程,蛋白质折叠。(3)计算机。电路草图,文件系统,编译器。(4)计算机图形图像。电影,电子游戏,虚拟现实。(5)安全。手机,电子商务,投票计算机。(6)多媒体。mp3,jpg,divx,hdtv,人脸识别。(7)社会网络。推荐系统,新闻feeding,广告学。(8)物理学。n体模拟,粒子碰撞模拟。针对个人,公司,学习 阅读全文

posted @ 2013-06-16 19:21 板栗小羊 阅读(2558) 评论(7) 推荐(1) 编辑

麻省理工算法导论学习笔记(5)----线性时间排序
摘要:排序可以多快?看情况。运行时间可以小于nlogn吗? 比较排序,它的速度不会快于nlogn。然后用决策树来证明了这个结论。 计数排序,基数排序,桶排序等非比较排序算法,平均时间复杂度都是O(n)。 这些排序因为其待排序元素本身就含有了定位特征,因而不需要比较就可以确定其前后位置,从而可以突破比较排序算法时间复杂度O(nlgn)的理论下限。 计算排序(counting sort): (1)假定范围的整数。 (2)O(n)。 (3)辅助空间问题。 基数排序(radix sort): (1)数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。... 阅读全文

posted @ 2013-06-04 23:08 板栗小羊 阅读(687) 评论(0) 推荐(0) 编辑

麻省理工算法导论学习笔记(4)----快排及随机化算法
摘要:百度百科:快速排序(Quicksort)是对冒泡排序的一种改进,由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 维基百科:快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。 步骤为:从数列中挑出一个元素,称为 "基准"(pivot)。重新排序数列,所有元素比基准值小的摆放在基准前面,所有 阅读全文

posted @ 2013-06-02 22:06 板栗小羊 阅读(501) 评论(0) 推荐(0) 编辑

麻省理工算法导论学习笔记(3)----分治法
摘要:分治法思想: (1)Divide,把问题分解成子问题。 (2)Conquer,循环的解决子问题。 (3)Combine,合并子问题的解得到原问题的解。 归并排序: (1)将长度为n的数组,分解成2个子数组。 (2)循环的对2个子数组进行归并排序。 (3)对排序的子数组进行合并。 T(n)=2*T(n/2)+O(n)=Θ(nlogn) 二分查找: (1)找出长度为n的有序数组的中间元素。 (2)循环的对满足条件的其中一个子数组进行查找。 (3)不做任何事情。 T(n)=1*T(n/2)+O(1)=Θ(logn) a的n次: (1)an=an/2*an... 阅读全文

posted @ 2013-06-01 21:16 板栗小羊 阅读(573) 评论(0) 推荐(0) 编辑

麻省理工算法导论学习笔记(2)----渐近符号、递归及解法
摘要:这节课,大概讲了一些符号的用法,毕竟偏数学化,没有涉及算法的知识。我也参考了下别人的笔记,本节课内容不是太多,主要是符号表示和递归的复杂度求解方式,下面分2个部分讲解。 一,渐进符号 (1)O符号,f(n) = O(g(n)),表示f(n)的复杂度最多与g(n)一个数量级,即小于等于。 (2)Ω符号,f(n) = Ω(g(n)),f(n)的复杂度最少与g(n)一个数量级,即大于等于。 (3)o符号,f(n) = o(g(n)),表示f(n)的复杂度要比g(n)的数量级小,即小于。 (4)ω符号,f(n) = ω(g(n)),表示f(n)的复杂度要比g(n)的数量级大,即大于。 ... 阅读全文

posted @ 2013-05-21 00:00 板栗小羊 阅读(2566) 评论(4) 推荐(1) 编辑

麻省理工算法导论学习笔记(1)----算法介绍
摘要:我决定啃几个大块头,今天开始跟着公开课学习,一是巩固自己对算法理解,二是可以分享学习心得。 普林斯顿大学的算法课好像也讲完了,只有讲义,好像还没视频,下面我先学麻省理工的算法导论课。 我是一个懒孩子,希望大家监督我。没有监督,俺继续不下去,呃哈哈。谢谢。 为什么学习算法? (1)什么比性能更重要?正确性,简洁,可维护性,成本开销,功能性,模块化,安全,可扩展性,用户体验等。 (2)如果算法和性能不重要,为啥关注呢?为什么学习?性能与体验关联,实时性,性能是其他的基础,性能就像货币,你用java来代替c,损失三倍性能,为的是其他方面的优越性,比如对象化,exception机制等。 ... 阅读全文

posted @ 2013-05-19 23:44 板栗小羊 阅读(2705) 评论(7) 推荐(3) 编辑

导航