稳定性(Stability):先按性质A排序,再按性质B排序,性质B相同的那些项是否仍然是按性质A排序的? 一个稳定的排序,相同值的元素应仍保持相对顺序(relative order) 稳定的算法:插入排序.Mergesort等 不稳定的算法:选择排序:Shellsort等…
计算复杂度(Computational complexity):用于研究解决特定问题X的算法效率的框架 计算模型(Model of computation):可允许的操作(Allowable operations) 成本模型(Cost model):操作数(Operation counts) 复杂度上界(Upper bound):保证能在一定的时间内解决 复杂度下界(Lower bound):通过数学方法证明,必须花费的最少时间 最优算法(Optimal algorithm):可能达到的最小复杂…
排序算法有着广泛的应用 典型的应用: 排序名称 排序MP3音乐文件 显示Google的网页排名的搜索结果 按标题顺序列出RSS订阅 排序之后下列问题就变得非常简单了 找出中位数(median) 找出统计数据中的异常值 数据库中的二分查找 在邮箱中找出重复的邮件 不是特别典型的应用: 数据压缩 计算机图形 计算生物 负载平衡 Java系统排序(System sorts) Arrays.sort(). 有不同的方法对应不同的基本类型 有一个实现Comparable接口的方法 有一个使用Compara…
发明者:Sir Charles Antony Richard Hoare 基本思想: 先对数据进行洗牌(Shuffle the array) 以数据a[j]为中心进行分区(Partition),使得a[j]左侧的数据都小于等于a[j],a[j]右侧的数据都大于等于a[j] 分区完后递归排序 分区演示(partitioning demo) 重复操作指导i和j指针相遇 当a[i] < a[lo]时,令i从左往右扫描 当a[j] > a[lo]时,令j从右往左扫描 交换a[i]和a[j] 当指针相遇…
起源:冯·诺依曼最早在EDVAC上实现 基本思想: 将数组一分为(Divide array into two halves) 对每部分进行递归式地排序(Recursively sort each half) 合并两个部分(Merge two halves) 归并排序体现的是一种分治思想(Divide and conquer) 演示: 1. 给出原数组a[],该数组的lo到mid,mid+1到hi的子数组是各自有序的. 2. 将数组复制到辅助数组(auxiliary array)中,给两部分的首元…
很多时候排序是为了对数据进行归类,这种排序重复值特别多 通过年龄统计人口 删除邮件列表里的重复邮件 通过大学对求职者进行排序 若使用普通的快排对重复数据进行排序,会造成N^2复杂度,但是归并排序和三路快排就没有这样的问题. 归并排序对重复数据排序的比较在1/2NlgN和NlgN之间 三路快排 目标:将数据分成三个区间(3-way partitioning) lt和gt区间内的元素都和比较元素v相等 lt左边的元素都比v小 gt右边的元素都比v大 性能 三路快排的复杂度比普通快排小,主要取决于数据…
问题 给定N个元素的数组,求第k大的数. 特例当k=0时,就是求最大值,当k=N-1时,就是求最小值. 应用顺序统计求top N排行榜 基本思想 使用快速排序方法中的分区思想,使得a[k]左侧没有更小的数,右侧没有更大的数 性能 快速选择算法的复杂度是N. 最坏情况下的复杂度是1/2N^2,但是可以通过预先洗牌来防止出现最坏情况 public static Comparable select(Comparable[] a, int k) { StdRandom.shuffle(a); int l…
要熟练掌握比较器Comparator public final Comparator<T> MY_COMPARATOR = new myComparator(); //定义比较器 ..... public int comparaTo(T t){ ..... } private class myComparator implements Comparator<T>{ public int compare(T v, T w){ return v.comparaTo(w) //compa…
比较器接口(Comparator interface):用可选顺序(alternate order)进行排序 public interface Comparator<key> int compare(Key v, Key w) //比较元素v和w 示例: Java系统排序(java system sort) 创建Comparator对象(Create Comparator object) 向Array.sort()传递第二参数 String[] a; ... Arrays.sort(); //…
网友笔记参考 果壳Mooc首页 revilwang的专栏 白色咖啡 Weiran Liu的渣技术小专栏 Bug表:http://findbugs.sourceforge.net/bugDescriptions.html 老师提供的包:http://introcs.cs.princeton.edu/java/stdlib/ 课本Textbook :http://algs4.cs.princeton.edu/home/…
先附上challenge要求: 博主最近在刷coursera普林斯顿大学算法课part1部分的作业,Programming Assignment2最后的这个extra challenge当初想了一段时间.最开始的想法就是创建一个RandomizedQueue对象,然后先让前k个String入队,后面的每读一个String以一定概率让它入队,不过之前需要让RandomizedQueue出队一个String.标准输入读完之后,得到一个k个String的RandomizedQueue,然后随机出队打印…
i春秋作家:tllm 原文来自:利用python完成大学刷课(从0到完成的思路) 最近刚刚开学,学校总是有很多让人无语的课要修,还不能不修.然后我想写一个自动修课的脚本.大佬们不要笑我 是边面向百度学selenium边写脚本的 然后踩了一些坑 记录一下 先放最终效果视频 PS:室友在打lol说看见中单 不是说我哈 哈哈哈哈 http://ow2cltt3t.bkt.clouddn.com/15d3ed600eb39af4d80c4a49088b5c06.mp4 0x01: 首先分析一下它是怎么验…
通用的(泛型)算法 generic algorithm 总览 特性: 1,标准库的顺序容器定义了很少的操作,比如添加,删除等. 2,问题:其实还有很多操作,比如排序,查找特定的元素,替换或删除一个特定值等,但是标准库并未给每个容器都定义成员函数来实现这些操作. 3,解决办法:因为算法是相同的逻辑,只是进行运算的元素的类型是不同的.所以定义了一组与类型无关的通用的(泛型)算法:generic algorithm.它们实现了实现了上述标准库未提供的操作. 4,好处:不用为每个容器实现上述的操作. 大…
凸形状内部的任意两点的连线都应该在形状里面. 1 道格拉斯-普克算法 Douglas-Peucker algorithm 这个算法在其他文章中讲述的非常详细,此处就详细撰述. 下图是引用维基百科的.ε称之为阈值 shreshold 图一 静态图如下: 具体详细的可以参考如下两篇文章. 相关文章如下: 道格拉斯-普克 抽稀算法 附javascript实现,该文章只看他的文字讲解就好,他的代码不是通过python实现的. 道格拉斯-普克算法(Douglas–Peucker algorithm),该文…
假设我们有一个固定样本集,它包含 个样例.我们可以用批量梯度下降法来求解神经网络.具体来讲,对于单个样例(x,y),其代价函数为:这是一个(二分之一的)方差代价函数.给定一个包含 个样例的数据集,我们可以定义整体代价函数为: 以上公式中的第一项 是一个均方差项.第二项是一个规则化项(也叫权重衰减项),其目的是减小权重的幅度,防止过度拟合. [注:通常权重衰减的计算并不使用偏置项 ,比如我们在 的定义中就没有使用.一般来说,将偏置项包含在权重衰减项中只会对最终的神经网络产生很小的影响.在贝叶斯规则…
写在前面: 为了能够使后续的代码具有高效简洁的特点,在这里讲一下STL,就不用自己写堆,写队列,但是做为ACMer不用学的很全面,我认为够用就好,我只写我用的比较多的. 什么是STL(STl内容): 容器(Container): 是一种数据结构,如list,vector,和deques ,以模板类的方法提供.为了访问容器中的数据,可以使用由容器类输出的迭代器: 迭代器(Iterator): 提供了访问容器中对象的方法.例如,可以使用一对迭代器指定list或vector中的一定范围的对象.迭代器就…
排序算法的介绍 排序也称排序算法 (Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类 1) 内部排序: 指将需要处理的所有数据都加载 到内部存储器(内存)中进行排序. 2) 外部排序法:数据量过大,无法全部加载到内 存中,需要借助外部存储(文件等)进行 排序. 常见的排序算法分类 算法的时间复杂度 度量一个程序(算法)执行时间的两种方法 1.事后统计的方法这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序: 二是所…
1. 前言维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列. 也就是说给定了HMM的模型参数和一个观测序列,计算一系列的隐状态,使得此观察序列的出现可能最大,即最大化P(隐状态 | 观测序列),给定观测序列,求最可能的对应的隐状态序列. 实际上解决此问题,在<统计学习方法>中给出了两种解法,一个是近似算法,另一个就是维特比算法(Viterbi algorithm) 2.…
蒲公英 · JELLY技术期刊 Vol.42 这是一个最好的时代,多样化的平台给了所有人成长发展的机会,各种需求和解决需求的人让人大开眼界:但这也并不是完美的时代,"前端还需要懂什么算法?"."中国人不需要隐私!!"."写个 PPT 还需要耗费时间?"--言路畅通也带来很多无畏的恶意,但天光台高未百尺,下眺林岭如屏帷,当我们站得足够高时,原本的知见障就不再是一个问题. 就好像 Trekhleb 的 JS 算法课:保护隐私也并不是用户在孤军奋战,同…
文章不是技术文,只是分享一些感想,作为一只程序猿,不说好好敲代码,跑出来思考人生,不是合格的程序猿,罪过罪过,自我反思3秒钟,我们继续,毕竟程序猿的人生不只是Coding,也希望自己这点感想被更多刚入学不久的大一新生看到. 又是一年开学季,发现自己大学毕业两年多了,回忆了大学期间的种种,依旧记得开学初被一堂不知名教师讲座忽悠到退学重新高考的相识几天的舍友,我也无法评价他如何,都是自己的选择,吃亏收获都是自己的,也依旧记得一块奋斗的室友,同样记得lol游戏的欢乐时光,但这一切却一去不复返. 在我们…
(在家里的电脑上Linux Deepin截的图,屏幕大一点的话,deepin用着还挺不错的说) 这个应该是大二的算法课程上机实验时做的一个小程序,也是我的第一个GUI小程序,实现什么的都记不清了,只记得当年费了不少心思,找了不少的资料,至今连好多排序算法还不会…咕~~(╯﹏╰)b 在排序算法的文件中还保存有直接从网上找的代码的地址链接…这些我都不会乱说的 在Linux下,键入make即可生成main程序,运行,点击上面的按钮就会调用各个排序函数计算,嗯…现在回想起来,貌似是做过内存拷贝保证各个排…
cb51a_c++_STL_算法_根据第n个元素排序nth_elementnth_element(b,n,e),比如最大的5个数排序,或者最小的几个数nth_element(b,n,e,p)对比:partition()算法,分区算法 error C2675: 一元“++”:“TT88”不定义该运算符或到预定义运算符可接收类型的转换for (TT88::iterator iter = ideq.begin(); iter != ideq.end(); ++ideq),写错了,应该是++iter /…
在前面的博文(http://blog.csdn.net/jasonding1354/article/details/37736555)中介绍了作为分治策略的经典实例,即归并排序.并给出了递归形式和循环形式的c代码实例.可是归并排序有两个特点.一是在归并(即分治策略中的合并步骤)上花费的功夫较多,二是排序过程中须要使用额外的存储空间(异地排序算法<out of place sort>). 为了节省存储空间.出现了高速排序算法(原地排序in-place sort). 高速排序是由东尼·霍尔所发展的…
1.头文件algorithm中有函数sort()用于排序,参数为:排序起始地址,排序结束地址,排序规则(返回bool型)例如,要将array[] = {5,7,1,2,9}升序排列,则使用: bool cmp(int a,int b); int main() {     int array[] = {5,7,1,2,9};     sort(array,array+5,cmp);     for(int i = 0;i < 5;i++)         cout << array[i] …
序 到目前为止,关于排序的问题,前面已经介绍了很多,从插入排序.合并排序.堆排序以及快速排序,每一种都有其适用的情况,在时间和空间复杂度上各有优势.它们都有一个相同的特点,以上所有排序的结果序列,各个元素的次序都是基于输入元素之间的比较,因此,把这类排序成为比较排序. 对一个含有n个元素的输入序列,任何比较排序在最坏情况下都要用(nlogn)次比较来进行排序,由此也可以知道合并排序和堆排序是渐进最优的. 本章介绍了三种线性时间排序算法,计数排序.基数排序和桶排序,这些算法都是用非比较的操作来确定…
PTA数据结构与算法题目集(中文)  7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分)   Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. 输入格式: 输入的第一行包含两个正整数N(≤) 和C,其中N是纪录的条数,C是指定排序的列号.之后有 N行,每行包含一条学生纪录.每条学生纪录由学号(6位数字,保证没有重复的学号).姓名(不超过8位且不包含空格的字符串).成绩([0, 100]内的整数)组成,相邻属性用1个空格隔开. 输出格式: 在…
作业地址:http://coursera.cs.princeton.edu/algs4/assignments/8puzzle.html 作业难点: 1.如何求一个Puzzle的解? 根据作业提示,使用MinPQ将GameTree的不同状态以hamming或manhattan方法求得优先级,加入MinPQ队列,并对min值进行分析,直到达到最后状态.需要自定义MinPQ使用的数据结构. 2.如何在有限步的情况下判断一个Puzzle是否有解? 根据作业提示,如果Twin有解那么原始Puzzle就无…
作业地址:http://coursera.cs.princeton.edu/algs4/assignments/kdtree.html 作业难点: 1.如何构建KdTree,使用什么样的数据结构? 根据作业提示: private static class KdNode { private Point2D point; private boolean direction; private RectHV rect; private KdNode lb, rt; KdNode(Point2D p, b…
最近,不少高校延迟开学,大家只能宅家上网课. 有一些朋友,想趁此期间,多学点计算机的专业课,却不知从何学起. 211,985大学的计算机专业课都是经过授课教师精心安排的,从大一到大四,课程合理设置,循序渐进地学习. 而那些非计算机专业的同学,想要学习CS专业课,应该怎么安排呢? 为了帮助大家在家也能系统地学到大学计算机系学生的专业课程,实验楼特地推出了一条计算机专业课学习路径,有满满 37 门计算机课程,计算机必修到选修课,全部涵盖在此. 这些面向大学计算机专业课程的在线实验,将计算机上机课搬到…
http://www.cnblogs.com/jingwhale/p/4618351.html Apriori algorithm是关联规则里一项基本算法.是由Rakesh Agrawal和Ramakrishnan Srikant两位博士在1994年提出的关联规则挖掘算法.关联规则的目的就是在一个数据集中找出项与项之间的关系,也被称为购物蓝分析 (Market Basket analysis),因为“购物蓝分析”很贴切的表达了适用该算法情景中的一个子集. 关于这个算法有一个非常有名的故事:"尿布…