![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 70
iteye_18070
这个作者很懒,什么都没留下…
展开
-
十进制转十六进制的方法
今天看PHP的源代码,看到了bin2hex方法的实现,该函数功能是获取某字符的assii码的十六进制表示。本质就是将一个十进制的数转换成十六进制。而改十进制数必须是8位的,即可以通过一个两位的十六进制数表示。其核心算法只有两行:1: data>>42: data&15 最终结果就是:data>>4.data&15 ...原创 2011-06-01 00:37:23 · 578 阅读 · 0 评论 -
DJBX33A哈希函数实现——Bash
DJBX33A 哈希函数又叫做time33 哈希函数,PHP、Perl、Apache中都是用该方法做为其哈希函数的实现。 本文就对该哈希函数做一简单的介绍,并用Bash对其进行实现。 该方法十分简单,将字符串中的每个字符的ascii码迭代*33加在一起即可。即hash(i)=hash(i-1)*33+ascii(i)。 假如字符串为:abc,则结果就是hashCod...原创 2012-06-13 21:48:22 · 195 阅读 · 0 评论 -
会计记账小程序
许久不来,手都有些生疏了。写个小程序热热手先。 假设有一个数字,可以很大,理论上可以无限大。要如何转成其对应的汉子大写? 就是那种支票本上、汇款单上的那种大写金额。 例如: 数字:193817071803800182801088108 大写:壹佰玖拾叁亿捌仟壹佰柒拾万柒仟壹佰捌拾亿叁仟捌佰万壹仟捌佰贰拾捌亿零壹佰零捌万捌仟壹佰零捌 代码...原创 2015-12-10 10:38:01 · 570 阅读 · 0 评论 -
基于 FP-Tree 的关联规则挖掘——Bash实现
本文假设读者至少有对数据挖掘中的关联规则有基本了解,对Apriori算法的实现有一定了解。 在此基础上,我们讨论一种比Apriori更加高效的关联规则挖掘方法——基于FP-Tree的关联规则挖掘。 (一) 关于Apriori: Apriori是关联规则挖掘中最最最经典的算法,没有之一。同时,它也是向初学同学阐明关联规则精髓的最佳武器。 首先,我们简单回顾下Apri...原创 2012-06-18 15:30:51 · 331 阅读 · 0 评论 -
决策树的数学原理
说到决策树,大家肯定不陌生,由于其结构简单,学习成本低,且可解释性强,有着广泛的应用。因此各类书籍、技术博客都有介绍,且深入浅出、图文并茂、生动形象。 鉴于已经有很多带图的博客介绍决策树,这里就不上图了,主要以公式推导为主。 本文主要分三块内容来介绍决策树:首先会简单回顾下决策树的内容,由于这部分相对简单,大家了解的也多,因此会快速过一遍。随后本文会对决策树的数...原创 2016-04-11 11:37:11 · 590 阅读 · 0 评论 -
深入理解GBDT
GBDT 全称为 Gradient Boosting Decision Tree。顾名思义,它是一种基于决策树(decision tree)实现的分类回归算法。不难发现,GBDT 有两部分组成: gradient boosting, decision tree。Boosting 作为一种模型组合方式,与gradient descent 有很深的渊源,它们之间究竟有什么关系?同时 decision...2016-05-10 16:20:03 · 602 阅读 · 0 评论 -
推荐算法之协同过滤实战
协同过滤(Collective Filtering)可以说是推荐系统的标配算法。在谈推荐必谈协同的今天,我们也来谈一谈基于KNN的协同过滤在实际的推荐应用中的一些心得体会。 我们首先从协同过滤的两个假设聊起。 两个假设:用户一般会喜欢与自己喜欢物品相似的物品用户一般会喜欢与自己相似的其他用户喜欢的物品上述假设分别对应了协同过滤的两种实现方式:基于物品相似(i...原创 2014-02-01 23:02:51 · 724 阅读 · 0 评论 -
【0-1】矩阵分解
基于矩阵分解的推荐算法已经在工业界被广泛应用。这类算法希望用同一个空间的维度来描述推荐过程中两个实体(用户、物品)的隐语义的特征。 无论是基于数值的矩阵分解如PMF[SVD],还是基于概率的矩阵分解如PLSA、LDA,都是如此。只不过,用于PMF分解的评分矩阵中包含了用户对所访问物品的评分,而PLSA、LDA面对的数据则只能是用户有过某种访问行为的物品集合。 仅从信息量...2014-05-19 17:35:43 · 434 阅读 · 0 评论 -
BPR [Bayesian Personalized Ranking] 算法详解及应用实践
在推荐系统的实现中,几乎总会遇到从较多候选集中为用户选取特定的少数几个物品进行推荐,这本质上是一个Ranking问题。 在推荐场景中用户更缺乏耐性,对推荐结果的消费也十分有限。因此,排序的好坏直接决定了用户对一个准确率为90%的推荐候选集的满意度是否真的有90%。 这里我们为大家介绍一种“基于贝叶斯后验优化的个性化排序算法”:Bayesian Personalized Rank...原创 2014-06-04 19:10:44 · 1624 阅读 · 0 评论 -
白话NMF(Non-negative Matrix Factorization)——Matlab 实现
NMF——非负矩阵分解。如果你事先了解PMF[概率矩阵分解]的话,那么其实只要在PMF的基础上多加上一点,就是NMF了。 方法一: 在PMF中使用SGD【随机梯度下降】进行优化时,使用如下的迭代公式: 其中P、Q分别代表原始矩阵R的两个维度的隐含矩阵,在推荐应用中,一般讲P看做用户矩阵、Q看做物品矩阵。 从公式中不难看出,无论P矩阵还是Q矩阵都会出现...2014-07-22 21:21:45 · 1277 阅读 · 0 评论 -
谱聚类算法实现
谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法。将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的目的。"带权无向图"这个词太学术了,我们换一种叫法,即:相似度矩阵。假设我们有一个相似度矩阵,矩阵中存的是所有对象的两两相似度。 那么这个矩阵应该有如下性质:矩阵为N * N,N为...原创 2014-09-16 18:25:49 · 1384 阅读 · 0 评论 -
关于连续值离散化[MODL]
将连续值离散化的问题,在数据挖掘和机器学习的任务中并不鲜见,当然离散化的方法也有很多。本文将要介绍的是一种基于数据标签(label)来对连续数据值做离散化分割的监督学习方法。 问题:考虑有如下数据: 1,0 2,0 3,0 4,0 5,0 6,1 7,1 8,1 9,1 10,1第一列是连续值数...原创 2014-10-18 22:30:01 · 1070 阅读 · 0 评论 -
DTW算法时序应用与实现
关于dtw算法:dtw算法最初应用于语音识别中的孤音识别。即已知某个词的音频模板,给定一个新的音频序列之后,通过检测该词的音频模板与新音频序列之间的相似度,来判断该音频是否是该词。 问题在于,即使是同一个词,由于人的发音有语速、节奏、习惯的不同,其音频也不可能完全一致。 这种不一致,体现在序列长度、某个音节的音长等方面。 DTW(动态时间规整)算法应运而生:...2014-10-31 19:41:05 · 1019 阅读 · 0 评论 -
字符串中单调递增连续子序列——Bash
该问题和求单调递增子序列有点像,但不一样。其主要区别就是在于连不连续,如果不要求连续(单调递增子序列)在实现时的算法是动态规划,比较复杂。本文描述的问题是子序列连续的问题,相比而言会简单很多,原理和求最大值是一样的。 具体描述为给定一个字符串,求一个子串,该子串满足:1. 连续2. 该子串递增3. 是最长的单调连续递增的子串 例如:zxuhababcba结...2012-06-03 20:37:44 · 222 阅读 · 0 评论 -
Java中的Arrays.sort 分析及其非递归实现——Bash
上篇文章我们讨论了快速排序算法,它与归并算法同属分治算法的一种。两者在实现上很相似,都使用了分治递归的策略来实现。 相信大家对快排和归并排序都不陌生,不过我们平常接触到的一般是这两种算法的递归实现方式。以Java为例,其Arrays类中的sort在排序Object的时候用的就是归并排序。不过其在实现上做了优化,在子问题足够小时(每个递归子序列长度不大于7)通过插入排序完成这...2012-06-01 22:31:50 · 73 阅读 · 0 评论 -
快速排序的非递归实现 --Bash
写blog的好处是,琢磨过的东西不用再琢磨第二次了。 快速排序算法的非递归实现: #!/bin/bashdeclare -a inputArray=(2 3 5 0 1 5 7 1 2 9 0);declare -a startStack;declare -a endStack;#init inputArray randomlyfor((i=0;i&l...2012-05-26 14:05:12 · 133 阅读 · 0 评论 -
关于PHP的strtoupper函数
今天看到了PHP实现的标准扩展函数这一段,第一个挑了string相关的函数来看,毕竟这个是用的最多的。看到了strtoupper函数的实现。如下:char *php_strtoupper(char *s, size_t len){ unsigned char *c, *e; c = (unsigned char *)s; e = (uns...2011-06-28 21:49:34 · 394 阅读 · 0 评论 -
再谈PHP中的str_repeat函数实现
前段时间讨论了在PHP中生成某多个某字符或字符串的字符串的问题,呵呵。这句话听起来太别扭了。举个例子就是,生成10个a的字符串就是aaaaaaaaaa。当然这里的a可以是ab或任何其他字符串。 在博客“生成固定长度的某字符的字符串 PHP ”中描述了一共5中方法。也对这五种方法的效率进行了比对,其中以PHP中自带的str_repeat函数效率最优,这也在意料和情理之中。方法4,5都...2011-07-01 00:17:11 · 325 阅读 · 0 评论 -
详解PHP中Array结构HashTable
我们知道PHP中的Array在内部是以Hash的结构进行存储的。本文主要重点也是对PHP中Array的静态结构和动态结构进行分析和记录。这里的静态结构,是指存储PHP中Array数据时使用的数据结构,即所谓的HashTable。动态结构,是指程序在运行过程中,Array数据的存储状态。 首先PHP中的hashTable的结构如下:typedef struct bucket ...原创 2011-07-12 19:44:30 · 134 阅读 · 0 评论 -
查找字符串中出现次数最多的字符
针对该问题,有两种解法,无非就是时间和空间的权衡,在实际应用中根据具体情况而定,具体代码就不写了,分析如下,感兴趣的欢迎PK。[b]第一种解法,[/b]牺牲时间换取空间,具体做法是:1,首先对字符串进行排序,这一步的时间复杂度是固定的。可以有多种排序算法选择。2,扫描排序后字符串,并且统计遇到的每个字符的数量。方法为:如果下一个字符和当前字符不一致,则当前统计到的数据就是该字符在字...原创 2010-12-10 21:13:27 · 378 阅读 · 0 评论 -
朴素贝叶斯分类器的实现 (php)
本文用php实现了一个朴素贝叶斯分类器,针对属性值为离散型变量的记录进行贝叶斯分类。 通过对sample.csv文件中数据的学习,得到分类模型,然后对predict.csv中的数据的类指标进行预测。针对每个被预测数据,计算属于每个类的概率,然后概率最大的类就是该数据被预测的类归属。 附件中包含了程序文件:bys.php,样本文件:sample.csv,待预测数据文件:pred...原创 2011-02-14 13:41:54 · 250 阅读 · 0 评论 -
生成固定长度的某字符的字符串 PHP
在编程时,有时候会需要生成固定长度的空格或者特殊字符,以用于数据对齐等。今天讨论用php生成固定长度的某字符的字符串的一些方法。 方法一:二倍迭代拼接 function getchars($c,$length){ $binchars = decbin($length); $binchars_arr = str_split($binchars...2011-02-16 10:56:48 · 552 阅读 · 0 评论 -
php 截取字符串问题
在编程中经常与遇到将一个字符串根据某个字符切分的问题。一般我们会用explode将字符串切分成一个数组,然后进行进一步的操作。但假如有一个需求是要截取一个字符串中某两个相邻的分割字符中间的字串,那么用explode就显得有点浪费了。毕竟很多其他的被截取出来的字串用不到阿。浪费了空间也浪费了计算。 今天发现了一个方法,就是用preg_match。(如有雷同,实属缘分) ...原创 2011-02-27 00:28:41 · 84 阅读 · 0 评论 -
PHP将一个日期字符串转换成举例当前的天数
输入为一个日期字符串,例如:2011-3-23输出为举例当前的天数,例如:1 代码为: public static function convertDateToLong($dateStr){ $checkPattern = "/^\d{4}(((-\d{1,2}){2})|((\.\d{1,2}){2})|((\/\d{1,2}){2}))$/";...2011-03-24 16:55:53 · 304 阅读 · 0 评论 -
数据挖掘中 决策树算法实现——Bash
一、决策树简介: 关于决策树,几乎是数据挖掘分类算法中最先介绍到的。决策树,顾名思义就是用来做决定的树,一个分支就是一个决策过程。 每个决策过程中涉及一个数据的属性,而且只涉及一个。然后递归地,贪心地直到满足决策条件(即可以得到明确的决策结果)。 决策树的实现首先要有一些先验(已经知道结果的历史)数据做训练,通过分析训练数据得到每个属性对结果的影响的大小,这里我...2012-07-20 13:00:41 · 147 阅读 · 0 评论 -
PHP中Array的hash函数实现
今天回顾学习了PHP中变量实现的方法,在浏览其源码是发现在PHP中所有的数据类型通过一个union存储。php语言是弱类型语言,其实现中通过记录变量的类型和值来实现其管理。 PHP中使用最多的非Array莫属了,那Array是如何实现的?在PHP内部Array通过一个hashtable来实现,其中使用链接法解决hash冲突的问题,这样最坏情况下,查找Array元素的复杂度为O(N...2011-05-10 21:49:57 · 260 阅读 · 0 评论 -
基于堆 [Heap] 结构的 TopK 问题实现
在实际工作中我们经常会遇到将一个list中最大[最小]的前TopK个元素输出的问题。比如说在电商领域,求上个月卖的最好的前10个商品,或者是每个品类下卖的最好的前10个商品。 这类问题,很多数据库或数据仓库工具可以提供直接的实现,比如第一个问题在mysql中就直接order by + limit就好; 而第二个问题在Hive中也很简单, distribute + order by ...原创 2013-06-30 15:50:34 · 180 阅读 · 0 评论 -
两种求集合所有子集的方法--Bash实现
假设我们有一个求集合的全部子集(包含集合自身)的需求,即有一个集合s,包含两个元素 <a,b>,则其全部的子集为<a,ab,b>.不难求得,子集个数sn与原集合元素个数n之间的关系为:sn=2^n-1。 本文分别讲述两种实现方法: 一:位图法:1)构造一个和集合一样大小的数组A,分别与集合中的某个元素对应,数组A中的元素只有两种状态:“1”和“0”...原创 2012-04-30 23:33:41 · 296 阅读 · 0 评论 -
Viterbi 算法应用实现
算法简介:Viterbi 算法又叫维特比算法,其是HMM模型中在给出观测序列O,以及状态转移举证M 和 状态-观测矩阵Q之后,求解能够最佳解释序列O的状态序列S的一种动态规划算法。具体如下图所示:其中: 标记为O的 [0|1] 序列是观测序列, 标记为S的序列中横向的箭头即状态在根据转移矩阵M进行转移, 其中S序列与O序列之间向下的箭头表示根据状态生成...2014-12-22 10:51:43 · 189 阅读 · 0 评论