
Algorithm
文章平均质量分 77
OshynSong
百度云计算事业部研发工程师
展开
-
Huffman编码与解码的实现
Huffman编码相信学过数据结构这么课的都知道,概念也比较好理解,但是一般好理解的算法,在实际实现的过程中总是会遇到各种问题,一方面个人认为是对算法的实现过程不熟,另一方面在实际实现的过程中可以提升自己实现算法的能力,将自己的想法实现后还是比较满足的。下面是本人亲自实现的Huffman编码与解码的C语言实现,主要是记录一下自己当时的想法,供以后备忘吧。数据结构定义如下:typedef s原创 2014-04-27 19:15:55 · 1155 阅读 · 0 评论 -
机器学习实战——最大熵模型
信息熵香农与1948年提出的信息论以其中的信息熵这一基本概念为基础,用来表征人们对客观事件的不确定性的度量,与物理学中的熵表征物质的混乱程度有相似之处。 当处理不确定事件时,最常用的方式就是用概率方式描述,一般假定不确定的事件A每种可能的状态都有一个概率与之对应:P(Ai)s.t.∑i=1nP(Ai)=1P(Ai)≥0P(A_i)\\ s.t.\sum_{i=1}^nP(A_i)=1\\P(A_i原创 2015-05-07 16:33:17 · 4501 阅读 · 2 评论 -
机器学习实战——SVM(3/3)
前面两篇总结了线性支持向量机模型,总体来说,就是在样本输入空间下对每个维度进行线性组合之后使用符号函数判别最终的类别。第一个是理想情况下的线性可分SVM,这是第二个的近似线性可分SVM的基础。而且也是一种递进关系,是为了从数学抽象化的理想模型到现实情形的一种推广,但它们终究是一种线性模型,对于更复杂的现实情形有时候依然会难以描述,需要使用非线性模型去描述。非线性SVM由于现实问题的复杂性,导致训练的原创 2015-05-17 23:26:03 · 1509 阅读 · 0 评论 -
栅栏加解密python实现(支持密钥加密)
栅栏加解密是对较短字符串的一种处理方式,给定行数Row,根据字符串长度计算出列数Column,构成一个方阵。加密过程:就是按列依次从上到下对明文进行排列,然后按照密钥对各行进行打乱,最后以行顺序从左至右进行合并形成密文。解密过程:将上述过程进行逆推,对每一行根据密钥的顺序回复到原始的方阵的顺序,并从密文回复原始的方阵,最后按列的顺序从上到下从左至右解密。具体实现如下:所有实现封装到一个原创 2015-06-26 00:22:18 · 4529 阅读 · 1 评论 -
机器学习实战——组合方法与AdaBoost
对于分类问题,在给定数据集前提下,训练比较粗糙的弱分类器比精确的强分类器容易得多。另外,Schapire证明了强可学习与弱可学习是等价的,因此首先学习简单的弱分类器,并进行组合就可以得到强分类器,这就是组合方法的理论基础。 组合(Ensemble)方法是一种提高分类准确率的方法,是一个由多个弱分类器组合的复合模型,其中每个单个分类器都进行投票,组合分类器返回最终组合的结果,这样分类的结果比单个分类原创 2015-06-29 18:07:29 · 5615 阅读 · 0 评论 -
机器学习实战——条件随机场(CRF)
声明:本文是在《最优化方法》课程中阅读的Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data这篇文章后的总结。CRF由来条件随机场(CRF)这种用来解决序列标注问题的机器学习方法是由John Lafferty于2001年发表在国际机器学习大会ICML上的一篇经典文章所引入,对原创 2015-06-13 22:41:31 · 13205 阅读 · 0 评论 -
最大子数组问题
这是一个经典算法设计题目,虽然很早就见过这个问题,理解过原理,但一直没有实际实现过,一个算法在实际实现的过程中总是会遇到一些没有实现的时候想不到的问题。在这里,通过三种不同的方式的实现,来体会算法设计的思想和降低程序运行实际的巧妙之处。题目回顾输入:一个n个元素的数组,数组元素有正数和负数输出:一个或多个连续元素组成的子数组,这个子数组的元素之和是原数组所有子数组中最大的。变换:假原创 2015-10-31 11:50:19 · 637 阅读 · 0 评论 -
LeetCode [Symmetric Tree]
题目: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).判断一棵二叉树是否是镜像的,主要思路是基于对当前节点的判断之后进行递归,对于非递归方式暂未实现。代码如下: bool isSymmetric(TreeNode* root) {原创 2016-04-06 17:15:08 · 382 阅读 · 0 评论 -
House Robber 完整版
这是一个从简到繁的步进题目组。House Robber I第一个是一维很简单的线性状态转换,题目如下: You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping原创 2016-04-12 17:55:27 · 591 阅读 · 0 评论 -
Palindrome Linked-List
Given a singly linked list, determine if it is a palindrome.题目要求能在O(1)的空间和O(n)的时间内完成。基本思路如下: 1. 找到链表的中点元素,从中点元素开始reverse后半部分 2. 依次比较第一个和最后一个,并进行循环直到达到中点 3. 将后半部分再进行依次reverse恢复其中中点元素需要根据节点数是奇数还是偶数进行原创 2016-04-13 15:18:35 · 427 阅读 · 0 评论 -
机器学习实战——SVM(2/3)
上一篇总结了对于训练数据集线性可分的理想情况下,使用硬间隔最大化训练得到分类超平面的SVM方法,这种方法在实际应用中并不实用,因为实际的训练数据总是会存在人为或不可控的因素干扰产生各种噪声,因此是无法在特征空间下找到线性可分的超平面的,但是噪声总是有限的,可以对硬间隔这个限制进行放松,引入一个松弛变量来控制分类超平面的训练,从而可以对近似可以线性可分的实际应用数据进行学习和预测。从这里也可以很明显原创 2015-05-16 00:05:17 · 2055 阅读 · 0 评论 -
机器学习实战——SVM(1/3)
SVM(支持向量机)是典型的二分类的判别式模型,这种方法以Rosenblatt于1957年提出的感知机模型的基础上,都是通过训练一个分类超平面之后,作为分类的决策函数,然后对未知的样本进行预测。通过对输入特征使用法向量和截距w=(w1,w2,...wn)、bw=(w_1,w_2,...w_n)、b进行线性组合,得到超平面,最终的决策函数也和感知机一样,为符号函数f(x)=sign(w⃗ ⋅x⃗ +b原创 2015-05-13 00:55:03 · 1850 阅读 · 4 评论 -
机器学习实战——Logistic回归
回归概述(个人理解的总结)回归是数学中的一种模拟离散数据点的数学模型的方法,拟合一个连续的函数从而可以对未知的离散数据点进行分类或预测。这种方法有一个统一的形式,给定nn维特征的数据集合,对任意一个数据点Xi={x(1)i,x(2)i,...,x(n)i}X_i=\{x_i^{(1)},x_i^{(2)},...,x_i^{(n)}\}的每个维度都有一个回归系数wiw_i与之对应,整个模型就存在一个原创 2015-04-30 19:47:01 · 1742 阅读 · 0 评论 -
二叉树——查找两个任意节点的最近祖先
很久没有用过二叉树了,最近由于需要用到了,发现很多知识需要巩固了,中间涉及到一个算法就是找任意两个节点的最近祖先。通过本人回顾和演算,最终提出了下面一个方法,网上也有很多其他的方式实现,再次仅对自己好几个小时的工作作个记录和积累吧! 程序是用C语言写的,个人觉得如果用C#实现会更加方便。首先是数据结构定义:typedef char TElemType;typedef bool Statu原创 2014-04-27 18:55:15 · 1575 阅读 · 0 评论 -
基于ini配置文件实现多维数组数据的按行存储和读取
需求是为一个多维数组对象的数据按行存储到文件,需要键值对区分层级,对每个对象描述清晰。类似的格式如下:上图中的数据对应的就是如下的数组(php 语言):$arr = array( '10003' => array( 'id' => 10003,原创 2014-08-06 17:59:32 · 12952 阅读 · 0 评论 -
GIF图片的文件储存结构和动画原理
1.概述 GIF(Graphics Interchange Format,图形交换格式)文件是由CompuServe公司开发的图形文件格式,版权所有,任何商业目的使用均须 CompuServe公司授权。 GIF图象是基于颜色列表的(存储的数据是该点的颜色对应于颜色列表的索引值),最多只支持8位(256色)。GIF文件内部分成许多存储块,用来存储多幅图象或者是决定图象表现行为转载 2014-08-13 09:32:40 · 1224 阅读 · 0 评论 -
分治算法——归并排序与快速排序
1、归并排序分治思想:每次从中间分开为两个子问题,对每个子问题排序完成之后,将两个已排序的部分进行归并操作即得到最终排序的结果。(1)如果数组S中元素个数为0或者1返回(2)选取中间位置的元素下标,对左半部分SL递归排序,对右半部分SR递归排序(3)将排好序的SL、SR进行归并后返回最终结果平均时间复杂度O(NlogN),最坏情况也为O(NlogN),最好情况为O(N)。原创 2014-10-30 23:16:54 · 1329 阅读 · 0 评论 -
分治算法——Karastsuba算法
分治(Divide and Conquer)算法:问题可以分解为子问题,每个问题是可以独立的解决的,从子问题的解可以构建原问题。Divide:中间分、随机分、奇偶分等,将问题分解成独立的子问题Conquer:子问题的解可以单独解决,从子问题的解构建原问题最终的解Combine:每一步将子问题产生的解进行合并得到最终的解,合并的复杂度影响最终的算法时间复杂度Karatsuba算法是在原创 2014-11-01 00:37:30 · 2542 阅读 · 0 评论 -
Stable Matching Problem —— Gale Shapley算法
“一切算法都是从实际问题出发,深入理解问题内在的组合结构,从算法性着手进行设计。”Problem学生申请不同的大学,大学接收不同的学生,能否找到一个自我完善的算法来解决这个问题,使得最终的结果是一个稳定的匹配结果?同样的可以用在求职者与公司的招聘工作中。稳定匹配(Stable Matching)结果:不能找到一个申请方与一个接收方,使得他们各自都更喜欢彼此而胜过他们当前的匹配。Fo原创 2014-10-19 15:29:13 · 2830 阅读 · 0 评论 -
机器学习实战——kNN分类器
惰性学习法:简单的存储数据,一直等待,直到给定一个测试元组时才进行泛化,根据对存储的元组的相似性进行分类。kNN(k近邻)分类方法于20世纪50年代提出,由于计算密集型算法,因此到60年代之后随着计算能力增强后才逐步应用。kNN基于类比学习,将给定的测试元组表示为n维空间中的一个点,n代表属性数目。然后使用某种距离度量方式来寻找与给定测试元组最近的k个训练元组,对这个k个训练元组的类别进行统计原创 2014-12-08 17:06:29 · 3133 阅读 · 0 评论 -
记一个文本分类系统的实现
基于信息检索课程,完成实现了一个文本分类系统,现记录一下整个实现过程。文本分类以文本数据为分类对象,本质上是机器学习方法在信息检索领域的一种应用,可以继承机器学习领域的很多概念和方法,但同时也需要结合信息检索领域的特点进行处理。主要研究的方向是:文本分词方法、文本特征提取方法、分类算法。本人主要使用了5种常用的分类算法,分别是kNN、Rocchio、NBC、SVM和ANN,对每种算法的结果原创 2014-12-29 16:18:50 · 5288 阅读 · 10 评论 -
机器学习实战——感知机
感知机学习策略具体实现数据集最大最小规范化训练过程测试最终结果感知机是二分类的线性分类模型,由Rosenblatt于1957年提出,是支持向量机和神经网络的基础。感知机将学习到一个线性划分的分离超平面,属于判别模型。感知机输入空间为RnR^n空间,nn是特征数目,输出空间y={+1,−1}y=\{+1,-1\}。感知机学习一个如下的符号函数: f(x)=sign(wx+b)f(x) =原创 2015-04-23 00:57:44 · 1680 阅读 · 0 评论 -
gossip协议介绍
背景gossip 协议(gossip protocol)又称 epidemic 协议(epidemic protocol),是基于流行病传播方式的节点或者进程之间信息交换的协议,在分布式系统中被广泛使用,比如我们可以使用 gossip 协议来确保网络中所有节点的数据一样。Gossip protocol 最早是在 1987 年发表在 ACM 上的论文 《Epidemic Algorithms...原创 2019-06-14 12:51:53 · 2442 阅读 · 0 评论