- 博客(17)
- 收藏
- 关注
原创 N—Queen 生成排列+O(n)判断
生成排列可以保证非同行同列如:vec=0,1,2,3,4 时间复杂度O(n!) 接着判断所给排列不在同对角线(以5-Queen为例): step1 顺序读元素,分别加上0,1,2,3,4 判断得到的数字是否重复 step2 顺序读元素,分别加上4,3,2,1,0 判断得到的数字是否重复
2015-09-01 18:45:23
551
原创 50种遍历树的方法
推荐一首歌50ways to leave your lover 50当然是虚指,包括遍历的方法和实现的方法 常见遍历顺序:前序、中序、后序 常见实现方法:递归、栈、队列 遍历树的核心在于“遍历”,输出所有节点,并对一个节点只输出一次 换个角度,对每个节点,确定该节点相对于相连接点的优先级,优先级定了,按优先级访问,就能达到目的 递归:左节点优先、右节点优先、父节
2015-09-01 17:37:23
745
原创 adaboost: 0%正确率=100%正确率
adaboost是二分类算法 二分类器有个很好的性质:若sign(f)em>1/2,将分类器改为 -sign(f)即可 对于adaboost,其系数能自适应em>1/2的情况 子分类器Gm(x)系数 am=1/2 log( (1-em)/em ) 为负 am 对应的加权子分类器:amGm(x)取负,则该子分类器等价于em 另一方面,数据集的权值更新:Wm+1,
2015-09-01 16:00:23
1440
原创 cart剪枝,罚项系数a讨论
损失函数: Ca(T)=C(T)+a|T| C(T):训练误差 a|T|:罚项,树的大小 《统计学习方法》一书提到,计算各节点的a阈值,当a超过某节点阈值,则选择对该节点剪枝。 a= C(t)-C(Tt) / |Tt|-1 可见a由届时的树计算决定 首先:每次只能计算叶节点的父节点 所对应的a值??? 如上图,直接计算C节点的
2015-08-12 17:21:27
504
原创 二分类——多分类:一点思考
将多分类归结为二分类,有两种简单方法: 1、类A——非类A 单类别与补集分类 2、类A——类B 单类别与单类别分类 举个简单线性分类例子: 对于左图,可使用方法1,因为类别与补集直接线性可分 对于右图,每个类别都不可与其补集线性分割, 但两类之间线性可分 可见“两类间线性可分”这一命题弱于“类别与补集线性可分” 特别地,对于未
2015-08-12 12:52:12
1794
原创 二叉搜索树修改
如果有一个方法,每迭代一步都能从数据中选出一部分“高纯度”的特定类, 那么即使每步只能分别出1%的类别,只需100步即可完成漂亮的分类规则。 ID3算法、C4.5等算法使用熵作为评价标准,导致一个问题:树细分到一个样本一个节点,熵为0。 为应付这个情况,通常选择固定子树数量上限等方法。 相对应的,cart树直接定义为二叉树,保证了每次划分的结果是,从总体而言把不同类尽可能分
2015-08-12 10:18:16
519
原创 kd树修改:BBF简析
bbf是一个近似算法,凭借决定算法执行步数,限定了搜索次数。 bbf是我在v july v博客里看到的,里面提到“算法执行至队列为空”,应该是不当的说法,若真实行至此,则完成了所有点的扫描。 下面简单图示: 对于任意一棵树,可以通过对节点的谓词取反,得到交换左右子树的效果,最终得到上图。 红色节点为搜索路径(作为初始解),将蓝色节点加入优先队列(优先级为与点A的距离),然后
2015-08-10 15:02:52
826
原创 kd树简析
一言蔽之,kd树的想法为: 对于目标点A,若点B较之其他点,每个纬度都更接近A,则猜测B接近该点。 kd树构造算法: 方法:共n个纬度,轮次选择纬度作为划分依据(纬度1、纬度2……),重复直至训练样本用完。 结果:将每个空间一分为二,重复划分。最终每个子空间附着一个点。 kd树寻找1-临近: 方法:将点A所划分到的空间k对应点Xk作为初始解,连接两点,以A为球心做球,寻
2015-08-10 14:52:28
766
原创 排序算法_链表实现
数组的高效体现于随机访问,插排、快排等排序算法未用到这一特点, 故这两种排序算法可基于链表实现 插入排序: 迭代器 p 顺序访问链表 迭代器 i 顺序访问前 p 个元素 主要的操作为 当 p>i && p.value 删除原位置的 p 将p插入 i-1 与 i 之间 若为单向链表,保存 i-1 与 p-1 算法复杂度为比较的次数O(n^2),减少了移动数组导致的开
2015-08-08 15:35:16
448
原创 快排最劣情况
将数组排序,一次从头部或尾部获取元素,加入空队列p 则对于构造出的队列,使用快排效率退化为O(n^2) 即保证了尾端的元素无法对数组划分(0-n划分)
2015-08-08 15:17:25
922
原创 快排partition过程——索引小修改
原伪代码: 1 partition(A,p,r) 2 x=A[r] 3 i=p-1 4 for j=p:r-1 5 if A[j] 6 i++ 7 exchange A[i].A[j] 8 exchange A[i+1],A[r] 9 return i+1 索引i指向 包括《剑指offer》中也是这样实现索引, 其实很不方便,一开始指向了数组前(外部)的元素,第8、
2015-08-08 15:08:52
567
原创 O(n)冒泡排序
数据访问策略:顺序访问 且两步迭代间独立(独立是指顺序执行不由状态变量控制) 每个计算机负责冒一个泡,第一个泡访问元素[0]结束后,第二个泡即可开始访问元素[0] 不严格说:第一个泡访问末尾元素时,第二个泡访问倒数第二个元素, 所以第一个泡冒泡结束时 ,产生了所有的泡泡,算法结束 时间复杂度O(n)
2015-07-28 08:10:27
829
原创 pagerank收敛原因
迭代公式 X=(1-a) x E+axRxX 其中a:衰减系数 E:nx1单位向量 R:nxn状态转移概率矩阵 X:nx1状态矩阵,(i,1)表示网站i得票数,总票数为1 展开迭代式,得到 X=(1-a)E+(1-a)axRxE+(1-a)a^2 xR^2xE+...(1-a)a^(n-1)xR^(n-1)xE 整理易得 X= 随着n增长,常数项(1-a)x a^i
2015-07-28 07:59:44
1967
原创 插排最优情况
心得:利用数组本身先验特点,决定比较顺序。考虑重复元素情况,减少常数因子。 结论:插排有序数组(包括部分或全部重复) 比较顺序自右向左,比较操作O(n),插入操作O(0); 比较顺序自左向右,比较操作O(n^2), 插入操作O(0) 测试用例1:012,345,678 测试用例2:000,000,000 插排(数组实现) 主要策略:顺次遍历数组元素(i=0:size),维
2015-07-26 11:16:29
744
原创 海上钢琴师
MS收购了MC,这好像是去年的新闻,不知道这款被玩坏了的游戏会被微软怎么折腾。 我是大学时接触的MC,一开始对方块画面无爱,但最后我被游戏自身极度的自由所征服,没事喜欢玩玩水玩玩岩浆。 MC中有些资源是不可再生的,如矿石资源,这让玩家不得不选择合理运用资源。 另外一个决定我游戏体验的就是MC没有地图(科技低),作为路痴的我生存空间一般不超过一个操场。 开始聊海上钢琴师。 几乎所有
2015-07-26 09:50:46
976
原创 为什么写博客
我不愿意人云亦云,也不愿意拾人牙慧,也许我不是第一个持有相关观点的人,但我所记录的,都是我思考时所经历的。 本人西电本科生,意向算法工程师,欢迎提供offer
2015-07-26 09:11:05
396
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅