上一页 1 ··· 5 6 7 8 9 10 11 下一页

2013年10月8日

摘要: 从《基于比较的排序结构总结 》中我们知道:全依赖“比较”操作的排序算法时间复杂度的一个下界O(N*logN)。但确实存在更快的算法。这些算法并不是不用“比较”操作,也不是想办法将比较操作的次数减少到 logN。而是利用对待排数据的某些限定性假设 ,来避免绝大多数的“比较”操作。桶排序就是这样的原理。桶排序的基本思想 假设有一组长度为N的待排关键字序列K[1....n]。首先将这个序列划分成M个的子区间(桶) 。然后基于某种映射函数 ,将待排序列的关键字k映射到第i个桶中(即桶数组B的下标 i) ,那么该关键字k就作为B[i]中的元素(每个桶B[i]都是一组大小为N/M的序列)。接着对每个桶.. 阅读全文
posted @ 2013-10-08 21:09 虚若怀谷 阅读(150) 评论(0) 推荐(0) 编辑

2013年9月27日

摘要: 编程论到极致,核心非代码,即思想。所以,真正的编程高手同时是思想独到及富有智慧(注意与聪明区别)的人。每一个算法都是一种智慧的凝聚或萃取,值得我们学习从而提高自己,开拓思路,更重要的是转换思维角度。其实,我们大多数人都活在“默认状态”下。没有发觉自己的独特可设置选项-----思想。言归正传(呵呵!恢复默认状态),以下学习基数排序。【1】基数排序以前研究的各种排序算法,都是通过比较数据大小的方法对欲排数据序列进行排序整理过程。而基数排序却不再相同,那么,基数排序是采用怎样的策略进行排序的呢?简略概述:基数排序是通过“分配”和“收集”过程来实现排序。而这个思想该如何理解呢?请看以下例子。(1)假设 阅读全文
posted @ 2013-09-27 23:14 虚若怀谷 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 这一节讲的是线性排序。一.计数排序(Counting Sort)基本思想:对每一个输入元素x,确定出小于x的元素个数。适用范围:适用于输入是由小范围的整数构成的序列。稳定性:算法是稳定的。具体实现:#include using namespace std;// arr--初始输入数组, res--存放排序结果的数组,hash临时存储区[0...k]int arr[100], res[100], hash[100];int len, k = -1;void PrintHash(){ cout 0; --i) { res[hash[arr[i]]] = arr[i]; --hash[arr[i.. 阅读全文
posted @ 2013-09-27 23:13 虚若怀谷 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 第八章将介绍几种非比较排序—计数排序,基数排序,桶排序,这三种排序都在线性时间下运行的。这一节决策树其实是对前面的堆排序,快排等是最优的比较算法的证明,首先说下《算法导论》上对决策树的定义:一棵决策树是一棵满二叉树(注意看下面解释),表示某排序算法作用于给定输入所做的所有比较,而控制结构,移动等都被忽略了。注意:这里个人认为定义是错误的,决策树不是一棵满二叉树,连完全二叉树都不是。(不知道有没有朋友看到这里和我想法一样?)首先看看只有三个元素时,决策树的图:在决策树中,每个内结点都用i:j表示比较下标为i数组元素与下标为j的数组元素的大小。每一个叶结点是一个n个元素的全排列。所以排序算法的执行 阅读全文
posted @ 2013-09-27 22:33 虚若怀谷 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 其实这一篇我老早就写过了,只不过最近在总结《算法导论》,而第七章就是快速排序,我当初总结的快排也是根据算法导论来的,为了方便大家阅读,我在这里把曾经写过的重新再贴一遍。前几天写过一个堆排序的文章(http://www.wutianqi.com/?p=1820),里面谢了很多讲解和代码注释,个人感觉快速排序不是很难,所以不想写讲解,也不需要写注释,大家如果不明白什么是快速排序,可以去看下文章最后我推荐的几个链接。我查过网上很多关于快排的文章和代码,但是基本都是最原始的快排,即霍尔(Hoare)快排。想必大家也没有注意这些,我准备把霍尔快排,算法导论上的快排和随机化快排的代码一起发出来,供大家对比 阅读全文
posted @ 2013-09-27 22:16 虚若怀谷 阅读(247) 评论(0) 推荐(0) 编辑

2013年9月25日

摘要: 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]#includeusing namespace std;void HeapAdjust(int *a,int i,int size) //调整堆 { int lchild=2*i 阅读全文
posted @ 2013-09-25 23:29 虚若怀谷 阅读(185) 评论(0) 推荐(0) 编辑

2013年9月9日

摘要: 此文转自两篇博文 有修改序列最小优化算法(英语:Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法。SMO由微软研究院的约翰·普莱特(John Platt)发明于1998年,目前被广泛使用于SVM的训练过程中,并在通行的SVM库libsvm中得到实现。1998年,SMO算法发表在SVM研究领域内引起了轰动,因为先前可用的SVM训练方法必须使用复杂的方法,并需要昂贵的第三方二次规划工具。而SMO算法较好地避免了这一问题。前面最后留下来一个对偶函数最后的优化问题,原式为: -----------------这个 阅读全文
posted @ 2013-09-09 09:38 虚若怀谷 阅读(302) 评论(0) 推荐(0) 编辑

2013年8月30日

摘要: 本文从统计学角度讲解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest Boosting四种分类器的特点与分类方法,参考材料为密歇根大学Ji Zhu的pdf与组会上王博的讲解。CART(Classification And Regression Tree) Breiman, Friedman, Olshen & Stone (1984), Quinlan(1993) 思想:递归地将输入空间分割成矩形 优点:可以进行变量选择,可以克服missing da... 阅读全文
posted @ 2013-08-30 23:26 虚若怀谷 阅读(532) 评论(0) 推荐(0) 编辑

2013年8月29日

摘要: Random Forest是加州大学伯克利分校的Breiman Leo和Adele Cutler于2001年发表的论文中提到的新的机器学习算法,可以用来做分类,聚类,回归,和生存分析,这里只简单介绍该算法在分类上的应用。 Random Forest(随机森林)算法是通过训练多个决策树,生成模型,然后综合利用多个决策树进行分类。 随机森林算法只需要两个参数:构建的决策树的个数t,在决策树的每个节点进行分裂时需要考虑的输入特征的个数m。 1. 单棵决策树的构建: (1)令N为训练样例的个数,则单棵决策树的输入样例的个数为N个从训练集中有放回的随机抽取N个训练样例。 (2)令训练样例的输入特征的个数 阅读全文
posted @ 2013-08-29 22:03 虚若怀谷 阅读(540) 评论(0) 推荐(0) 编辑

2013年8月28日

摘要: 随机森林是一个高度灵活的机器学习方法,拥有广泛的应用前景,从市场营销到医疗保健保险。 既可以用来做市场营销模拟的建模,统计客户来源,保留和流失。也可用来预测疾病的风险和病患者的易感性。随机森林是一个可做能够回归和分类。 它具备处理大数据的特性,而且它有助于估计或变量是非常重要的基础数据建模。这是一篇关于使用Python来实现随机森林文章。 什么是随机森林?随机 森林 是 几乎 任何 预测 问题 (甚至 非直线 部分) 的固有 选择 。 它是 一个 相对较 新 的 机器 学习 的 策略 ( 在90 年代产生于 贝尔 实验室 ) 和 它 可以 几乎用于 任何方面 。 它 属于 机器 学习 算法 一 阅读全文
posted @ 2013-08-28 23:45 虚若怀谷 阅读(11084) 评论(1) 推荐(1) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 下一页

导航