随笔分类 - [41]Algorithm算法
-
堆排序学习笔记
摘要:堆排序学习笔记Posted on2013-08-07 22:40DM张朋飞阅读(22) 评论(0)编辑收藏一.基础准备 这个算法研究了两天,整整两天啊,中间水了一道线段树,好在皇天不负有心人,嘿嘿。 1991年计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了著名的堆排序算法(Heap Sort )。堆排序是高效的排序方法。没有最坏情况(即与平均情况一样),空间占用又小,综合效率比快速排序还好。 数据结构中的堆和操作系统中的堆、堆栈(栈)是没有关系的,不要有误解。 说道堆排序就不得不先 阅读全文
-
线段树初探
摘要:线段树初探Posted on2013-08-07 09:56DM张朋飞阅读(287) 评论(0)编辑收藏一.基础准备 自己发现:n个点的话,共n-1个非叶子节点,不过没证明过,直接看图。 线段树,也叫区间树(有人说实际不一样),是一个完全二叉树,它在各个节点保存一条线段,因而常用于解决数列维护问题,树的根节点表示是“整体”的区间,左右子树分别表示这个区间的左半边和右半边。 线段树是一个满二叉树,假设共n个节点,区间为[0,n-1],那么共2*n-1个节点,深度log(2*n-1),即O(logn),这基本上述所有操作的复杂度。 线段树缺点:数列中的数不能添加或者删除。 查询的时候为什么也需要h 阅读全文
-
Kemaswill 机器学习 数据挖掘 推荐系统 Ranking SVM 简介
摘要:Ranking SVM 简介排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Learning to Rank简介)。LTR有三种主要的方法:PointWise,PairWise,ListWise。Ranking SVM算法是PointWise方法的一种,由R. Herbrich等人在2000提出, T. Joachims介绍了一种基于用户Clickthrough数据使用Ranking SVM来进行排序的方法(SIGKDD, 2002)。1. Ranking SVM的主要思想 R 阅读全文
-
FpGrowth算法
摘要:FpGrowth算法频繁项集与关联规则挖掘(2)--FpGrowth算法 上一篇介绍了关联规则挖掘的一些基本概念和经典的Apriori算法,Aprori算法利用频繁集的两个特性,过滤了很多无关的集合,效率提高不少,但是我们发现Apriori算法是一个候选消除算法,每一次消除都需要扫描一次所有数据记录,造成整个算法在面临大数据集时显得无能为力。今天我们介绍一个新的算法挖掘频繁项集,效率比Aprori算法高很多。 FpGrowth算法通过构造一个树结构来压缩数据记录,使得挖掘频繁项集只需要扫描两次数据记录,而且该算法不需要生成候选集合,所以效率会比较高。我们还是以上一篇中用的数据集为例:TID.. 阅读全文
-
挑战能力——数字中不带9的正整数占所有正整数的比例是多少?
摘要:挑战能力——数字中不带9的正整数占所有正整数的比例是多少?先解释一下题目。举例说明:123456就是数字中不带9的正整数,124789是数字中带9的正整数。也可以知道,数字中带9的正整数和数字中不带9的正整数都有无穷多个。那数字中不带9的正整数占所有正整数的比例是多少?咋眼一看,这个比例的精确值很难一下子算出来。人们对很难一下子计算出来的值都会有进行估算的天性。有人估算能力强,有人估算能力弱。那么估算看看,这个比例是多少?是多少呢?考虑到有0-9十个数字,有人会说是9/10=0.9;有人觉得太高了,那么7/10=0.7怎么样;还太高,那么5/10=0.5差不多吧,这个答案已经让很多人狐疑了,那 阅读全文
-
编程之美:平面最近点对
摘要:编程之美:平面最近点对一.概念引入最接近点对问题的提法是:给定平面上n个点,找其中的一对点,使得在n个点的所有点对中,该点对的距离最小。严格地说,最接近点对可能多于1对。为了简单起见,这里只限于找其中的一对。 最简单的就是直接暴力,也可以分治,使用分治的话关键是如何合并,如果两边都是n/2个点比较的话,合并的时间是O(n^2),那么T(n)=2T(n/2)+O(n2),它的解为T(n)=O(n2),还是没什么优势,这就引导我们去优化合并算法。 为了找到一个有效的合并算法,可以先考虑一维情形,看下图: 假设左右两边的最小距离是ans={ans1,ans2},很有可能最小距离分别存在于直线两端p3 阅读全文
-
【经典算法】——KMP,深入讲解next数组的求解
摘要:【经典算法】——KMP,深入讲解next数组的求解前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k;但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导论,32章 字符串匹配虽然讲到了对前后缀计算的正确性,但是大量的推理证明不大好理解,没有与程序结合起来讲。今天我在这里讲一讲我的一些理解,希望大家多多指教,如果有不清楚的或错误的请给我留言。 1.kmp算法的原理: 本部分内容转自:http://www.ruanyifeng.com/blog/2013/05/Knuth 阅读全文
-
GiftWrapping算法解决二维凸包问题
摘要:GiftWrapping算法解决二维凸包问题一.问题描述 凸集(Convex Set): 任意两点的连线都在这个集合内的集合就是一个凸集. ⒈对于一个集合D,D中任意有限个点的线性组合的全体称为D的凸包。 ⒉对于一个集合D,所有包含D的凸集之交称为D的凸包(由此定义可以想到分治算法)。 可以证明,上述两种定义是等价的。点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。下图中由红色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包。一组平面上的点,求一个包含所有点的最小的凸多边形,这就是凸包问题了,这可以形象地想象成在地上放置一些不可 阅读全文
-
单链表的递归逆序
摘要:单链表的递归逆序单链表的逆序方法有很多种,求职过程中会碰到类似的题。比如进栈出栈;变量链表放入数组后利用数组的逆序重构链表;遍历链表时每次访问的节点都指向它的前节点;递归调用等。本次实验是用递归的方法实现单链表的逆序,网上有很多类似的code. 这次实验主要要注意的是指针引用的使用,要充分理解引用是个别名,指针的引用可以参考其它网友的一篇博文:指针的引用 实验内容是先构造一个随机指定长度的单链表,将其输出,然后逆序后输出。 代码如下:// reverse_list.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #incl 阅读全文
-
C/C++单链表
摘要:C/C++单链表先看例子,例1:定义链表//定义链表 struct stu { int name; int age; struct stu *next; }; 用一组地址任意的存储单元存放线性表中的数据元素。:以元素(数据元素的映象) + 指针(指示后继元素存储位置)= 结点(表示数据元素 或 数据元素的映象)不得不说百度解释的太官方了。1.含义:多组不同类型的数的组合(数组存储是不连续的)2.组成: 表头+结点+表尾结点=数据域+指针域表头:只有指针域 表尾:只有数据域以前老师讲的还是不错的,影响深刻,不过好像还是有点云里雾里。LZ所理解的链表1.链表就是一系列结构体2.这... 阅读全文
-
浅谈随机化算法
摘要:浅谈随机化算法一.线性同余法 随机数在计算机中扮演重要角色,不过现实中往往难以产生真正的随机数,很多教材上都采用了线性同余法,产生的随机数也只是在一定范围内,该范围的一定要比研究所使用的范围大,不能没有完全验证就又循环。 好事者称上面的性质为随机数要具有周期性,又要不具有周期性(晕),所谓周期性指的是到达一个足够大的数后又要重新开始,非周期性实际就是指范围要足够大,就像C/C++中要求RAND_MAX至少要是32767。 其中b >= 0,c >= 0,d 的范围),则只需要把上面的calCounts里的if改成y<x^3并且输出不乘以4就好了。四. 舍伍德(Sherwood 阅读全文
-
三大线性排序之桶排序
摘要:三大线性排序之桶排序一.概念引入 有作者把计数排序也称为桶排序(各个桶中元素的排序采用计数排序),得到数组C后直接从前往后遍历,输出数组值次数组下标,为0就不输出(或者存入原数组,不稳定),不过笔者认为这种说法不严谨(一个很明显的问题是输出会是双重for循环,不过也有那个意思,叫鸽巢排序也未尝不可),因为桶排序要求输入数据在[0,1)范围内(计数排序要求整数),先把区间[0,1)划分成n个相同大小的子区间,称为桶,然后将n个输入数分布到各个桶中去。因为输入数均匀且独立分布在[0,1)上,所以,一般不会有很多数落在一个桶中的情况。为了得到结果,先对各个桶中的数进行排序,然后按次序把各桶中的元素列 阅读全文
-
各种排序算法的分析及java实现
摘要:各种排序算法的分析及java实现排序一直以来都是让我很头疼的事,以前上《数据结构》打酱油去了,整个学期下来才勉强能写出个冒泡排序。由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间重新研究了一下。 排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。 内排序有可以分为以下几类: (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。 (2)、选择排序:简单选择排序、堆排序。 (3)、交换排序:冒泡排序、快速排序。 (4)、归并排序 ... 阅读全文
-
三大线性排序之基数排序
摘要:三大线性排序之基数排序一.概念 基数排序也不是基于比较和元素移位的,又称桶子法;数据结构课本上首先由扑克牌的排序引入,继而引出多关键字比较。 本文是基于计数排序的基数排序,只介绍最低位优先(Least Significant Digit First),谷歌之发现就几乎没有介绍MSD的,所谓LSD就是从数字的最低位逐个比较,比较的趟数就是最大数字的位数digit,因此需要先用countDigit方法求出位数digit。 局限性:本算法是稳定的,LSD需要使用稳定的算法,由于按位比较,因此需要整数,和计数排序不同的是,整数可以是负数,也可以很大,为什么呢? 数值较大:由于是按比较,统计数字出现次数 阅读全文
-
顺时针打印矩阵
摘要:顺时针打印矩阵最近一直在忙项目,都没有时间准备下个学期的校招,虽然已经有一些小公司主动招我去上班,但我还是想要去大公司里面看看,亲眼见识下那些业界牛人到底是怎样的。所以,也正计划开始做些面试题,打好基础。 基础薄弱是我的弱点,我都是做啥学啥,没有专门研究一个东西,像是搞过蓝牙和USB通信这些需要与硬件打交道的东西,也搞过数据库的设计,搞过微信公共账号,搞过网站,搞过android应用开发...等等,但都没一样是特别厉害的,相反,我总觉得自己好弱啊!! 面试是需要准备的,哪怕我们自认自己很牛逼,但一些平时没有用到的东西,像是计算机组成原理,计算机网络的基础知识,就会把我们弄懵了。 这些只要背就行 阅读全文
-
小学数学题,你会吗?
摘要:小学数学题,你会吗?一日,某小学生问作业:“将16分解为若干素数的和,求这些素数积的最大值”。不禁被吓了一跳。怎么小学生的数学题变得这么难了? 细细询问,小学生没学不等式,没学数学归纳法……。那么只能用最笨的办法——穷举,一个个地试的办法来解决。 穷举之道,在于一一举来,不多不少;而不多不少,则在于有条有理,从容不乱。 小于16的素数依次为:2,3,5,7,11,13。显然,最大积是16和{2,3,5,7,11,13}的函数,将这个最大积记为 F(16,{2,3,5,7,11,13}) 该最大积中可能有素因子2也可能没有,因此 F(16,{2,3,5,7,11,13}) =... 阅读全文
-
C语言复习笔记-17种小算法-解决实际问题
摘要:C语言复习笔记-17种小算法-解决实际问题判断日期为一年中的第几天(考虑闰年)View Code/** 计算该日在本年中是第几天,注意闰年问题* 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天* 特殊情况,闰年且输入月份大于3时需考虑多加一天*//**@author: 成鹏致远 *@net: http://infodown.tap.cn*/#include #include struct year_mon_day{ int year; int mon; int day;};int main(){ int i; int sum;//总天数 ... 阅读全文
-
图像二值化算法
摘要:基于Simple Image Statistics(简单图像统计,SIS)的图像二值化算法。这是个简单的算法,是全局二值算法的一种,算法执行速度快。 算法过程简单描述如下: 对于每一个像素,做如下处理 1、计算当前像素水平和垂直方向的梯度。 (two gradients are calculated |I(x + 1, y) - I(x - 1, y)| and|I(x, y + 1) - I(x, y - 1)|); 2、取两个梯度的最大值作为权重。(weight is calculated as maximum of two gradients); 3、更新权重的和... 阅读全文
-
poj1173 解题报告
摘要:poj1173 解题报告2013-07-21 13:31 by 期待 、,42阅读,0评论,收藏,编辑http://poj.org/problem?id=1173发现此题资料甚少,斗胆第一次写一份解题报告【题意】输入 n(代表二进制位数) k(代表黑条白条总共有几条,条形码是以黑条开始的,再白黑交替出现) m(代表每条最多占多少个二进制位) 输出这种模式的条形码的有多少个? 输入s,再输入s个二进制形式的条形码 输出每个条形码在该模式中的序号,序号是根据二进制条形码的十进制数值排序,序号从0开始。【解题思路】 动态规划+组合数学。我们举一个例子:n=7,k=4,m=3。 ⑴计算个数 ... 阅读全文
-
EM算法详解
摘要:EM算法详解1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么?图1 学生成绩的分布 欲求在抽样X时,最优的μ和σ2参数估计,虽然模型的原型已知,但不同的参数对应着不同的学生成绩分布,其中一种最简单有效的参数估计方法就是估计的参数在目前抽样的数据上表现最好,即使得f(X|μ,σ2)的联合概率最大,这就是极大似然估计,常用L(μ,σ2|X)表示,满足公式(1)所示的关系。在实际计算中,对数函数是一个严格递增的函数,对似然函数取代数后,计算要简单很多,而且直接的似然函数计算中涉及 阅读全文