算法
九茶
这个作者很懒,什么都没留下…
展开
-
大整数操作
问题解析:原创 2014-11-02 23:03:14 · 1709 阅读 · 0 评论 -
八皇后之回溯法解决
问题描述:要在8*8的国际象棋棋盘中放8个皇后,使任意两个皇后都不能互相吃掉。规则是皇后能吃掉同一行、同一列、同一对角线的棋子。如下图即是一种方案:原创 2014-11-23 22:09:56 · 13518 阅读 · 24 评论 -
浅识SkipList
跳表(SkipList)简介:给你一个有序数组,如果现在需要查找某一个数字,你可能会用二分法。 但是如果给你的是一个有序链表,那就用不上二分法了,你能想到什么方法? 跳表是一种很好的选择,理解和实现出来也相对比较容易。 跳表的查询:例如给出链表: 30 → 40 → 50 → 60 → 70 → 90 现在要插入一个 80 ,如果是用普通方法从头到尾逐个搜索的话需要比较的次数是 6 。但是如原创 2016-02-27 10:56:39 · 1498 阅读 · 0 评论 -
马踏棋盘之贪心算法优化
问题描述:曾经用简单的深度优先搜索方法、递归的形式对马踏棋盘进行搜索,运行效率不甚理想。(博客见马踏棋盘之递归实现)。所以现在用贪心算法将其优化了一下。问题解析:主要的思想没有变,还是用深度优先搜索,只是在选下一个结点的时候做了贪心算法优化,其思路如下:从起始点开始,根据“马”的走法,它的下一步的可选择数是有0—8个的。我们知道,当下一步的可选择数为0的时候,进行回原创 2014-11-28 23:43:44 · 21495 阅读 · 11 评论 -
基于Redis的Bloomfilter去重(附Python代码)
前言:“去重”是日常工作中会经常用到的一项技能,在爬虫领域更是常用,并且规模一般都比较大。去重需要考虑两个点:去重的数据量、去重速度。为了保持较快的去重速度,一般选择在内存中进行去重。数据量不大时,可以直接放在内存里面进行去重,例如python可以使用set()进行去重。当去重数据需要持久化时可以使用redis的set数据结构。当数据量再大一点时,可以用不同的加密算法先将长字符串压缩成 16/原创 2016-11-10 12:32:45 · 27616 阅读 · 17 评论 -
scrapy_redis去重优化(已有7亿条数据),附Demo福利
背景:前些天接手了上一位同事的爬虫,一个全网爬虫,用的是scrapy+redis分布式,任务调度用的scrapy_redis模块。大家应该知道scrapy是默认开启了去重的,用了scrapy_redis后去重队列放在redis里面。我接手过来的时候爬虫已经有7亿多条URL的去重数据了,再加上一千多万条requests的种子,redis占用了一百六十多G的内存(服务器,Centos7),总共才一百七十原创 2016-11-10 14:48:21 · 34052 阅读 · 23 评论 -
python实现二叉树和它的七种遍历
介绍:树是数据结构中非常重要的一种,主要的用途是用来提高查找效率,对于要重复查找的情况效果更佳,如二叉排序树、FP-树。另外可以用来提高编码效率,如哈弗曼树。 代码:用python实现树的构造和几种遍历算法,虽然不难,不过还是把代码作了一下整理总结。实现功能:树的构造递归实现先序遍历、中序遍历、后序遍历堆栈实现先序遍历、中序遍历、后序遍历队列实现层次遍历#coding=utf-8cl原创 2015-07-02 01:02:55 · 76795 阅读 · 17 评论 -
FP-Growth算法python实现
前言:关于关联分析和FP_Growth的介绍请见:什么是关联分析、FP-Growth算法的介绍。本文主要介绍用 python 语言实现 FP_Growth 算法的代码。 正文:FP_Growth项目目录有四个文件: >FP_Growth ▪ __init__.py ▪ tree_builder.py ▪ tree_building.py ▪ tree_miner原创 2015-07-03 22:51:03 · 16408 阅读 · 11 评论 -
FP-Growth算法之FP-tree的构造(python)
前言:关于 FP-Growth 算法介绍请见:FP-Growth算法的介绍。 本文主要介绍 FP-tree 的构造算法,关于伪代码请查看上面的文章。上接:FP-Growth算法python实现;下接:FP-Growth算法之频繁项集的挖掘(python)。 正文:tree_builder.py\color{aqua}{tree\_builder.py}文件:#coding=utf-8import原创 2015-07-04 00:18:33 · 7546 阅读 · 2 评论 -
FP-Growth算法之频繁项集的挖掘(python)
前言:关于 FP-Growth 算法介绍请见:FP-Growth算法的介绍。 本文主要介绍从 FP-tree 中提取频繁项集的算法,关于伪代码请查看上面的文章。FP-tree 的构造请见:FP-Growth算法之 FP-tree 的构造(python)。 正文:tree_miner.py\color{aqua}{tree\_miner.py}文件:#coding=utf-8import tre原创 2015-07-04 00:29:51 · 6226 阅读 · 0 评论 -
FP-Growth算法的介绍
引言:在关联分析中,频繁项集的挖掘最常用到的就是Apriori算法。Apriori算法是一种先产生候选项集再检验是否频繁的“产生-测试”的方法。这种方法有种弊端:当数据集很大的时候,需要不断扫描数据集造成运行效率很低。 而FP-Growth算法就很好地解决了这个问题。它的思路是把数据集中的事务映射到一棵FP-Tree上面,再根据这棵树找出频繁项集。FP-Tree的构建过程只需要扫描两次数据集。原创 2015-06-28 10:31:45 · 25916 阅读 · 5 评论 -
傅里叶分析之掐死教程(完整版)
原文链接:http://zhuanlan.zhihu.com/wille/19763358作 者:韩 昊知 乎:Heinrich微 博:@花生油工人知乎专栏:与时间无关的故事谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。转载的同学请保留上面这句话,谢谢。如果还能保留文章来源就更感激不尽了。——更新于20转载 2015-09-21 22:09:44 · 3448 阅读 · 2 评论 -
凸包问题的五种解法
前言:首先,什么是凸包? 假设平面上有p0~p12共13个点,过某些点作一个多边形,使这个多边形能把所有点都“包”起来。当这个多边形是凸多边形的时候,我们就叫它“凸包”。如下图: 然后,什么是凸包问题? 我们把这些点放在二维坐标系里面,那么每个点都能用 (x,y) 来表示。 现给出点的数目13,和各个点的坐标。求构成凸包的点? 解一:穷举法(蛮力法)时间复杂度:O(n³)。 思路:两点确原创 2015-05-29 17:58:51 · 60642 阅读 · 22 评论 -
计算机如何实现开根号?
今天看到一个问题:计算机如何实现开根号?如何求一个数字的算术平方根(又叫开根号,或者开方)?大家普遍都是用计算器直接计算的,对于程序员来说,就是调用sqrt()方法。但是其内部又是怎么实现的呢?下面作了下总结。———-方法一:迭代法学过计算方法的应该都还有印象:一个函数 f(x) 在区间 [a,b] 上连续,且 f(x)=0 在 x∈[a,b] 上有解,求x? 最简单的就是用二分法:分别求f(原创 2015-05-20 14:58:16 · 20123 阅读 · 4 评论 -
决策树之 C4.5
C4.5 是对 ID3 的一个优化,它根据信息增益率来进行属性选择。 关于决策树,请参见:http://blog.csdn.net/bone_ace/article/details/46299681 关于 ID3,请参见:http://blog.csdn.net/Bone_ACE/article/details/46312215 关于 C4.5C4.5 主要针对 ID3 的缺陷作了一些优化原创 2015-08-13 12:41:24 · 4438 阅读 · 0 评论 -
哲学家就餐问题
问题描述:五个哲学家(A~E)围着一张圆桌就餐,他们每个人面前都有一盘通心粉。由于通心粉很滑,所以需要两只筷子才能夹住,但每两个盘子之间只放着一只筷子,如下图。 哲学家只有两个动作:要么就餐,要么思考。而且他们之间从不交谈。 当一个哲学家饿了的时候,就拿起盘子左右两边的筷子开始就餐(不能同时拿起两只筷子)。就餐完以后,就把筷子放回盘子左右,继续思考。 由于他们之间互不交谈,所以很容易出现“死锁原创 2015-06-04 15:42:55 · 8117 阅读 · 2 评论 -
数组循环移位
问题描述:原创 2014-11-16 15:43:19 · 2185 阅读 · 0 评论 -
迷宫问题
问题描述:原创 2014-11-19 16:17:34 · 4276 阅读 · 2 评论 -
约瑟夫环
问题描述:原创 2014-11-17 18:07:52 · 4959 阅读 · 4 评论 -
决策树
在众多分类算法中,决策树应该是最基本的一种算法了,也是相对比较简单的一种算法。 决策树的介绍:首先,什么叫做决策树?决策树用于解决什么样的问题?先看一个例子: 现有某银行客户拖欠贷款的历史数据,如表 3-1。现在一个新客户{ no, married, 80K, ? } 前来申请贷款,请你根据银行的历史数据判断这个人会不会拖欠贷款? 当然,客户最终是否会拖欠贷款,我们是无法100%确定的。但原创 2015-06-01 08:18:09 · 2811 阅读 · 0 评论 -
Apriori算法的介绍
前言:数据挖掘中的关联分析可以分成频繁项集的挖掘和关联规则的生成两个步骤,而Apriori算法是找频繁项集最常用到的一种算法。 关于关联分析和频繁项集请见:什么是关联分析? 中言:我们还是利用购物篮的例子来讲述Apriori算法的思路。 购物篮信息如下: TID Items 001 Cola, Egg, Ham 002 Cola, Diaper, Bee原创 2015-06-27 13:32:24 · 11966 阅读 · 0 评论 -
马踏棋盘之递归实现
问题描述:所谓“马踏棋盘”问题,就是指在中国象棋的棋盘上,用马的走法走遍整个棋盘,在8*8的方格中,每个格都要遍历,且只能遍历一次。我们把棋盘抽象成一个二维数据,输入起始位置的坐标(x,y),根据马的“日”字走法,将马走的步数写入二维数组,然后输出。下面是一种走法:解决方法:我们从图中可以看到,一个位置的马可以有八个不同方向的下一步。如何表示下一步呢?设当前马的原创 2014-09-21 15:34:48 · 5984 阅读 · 2 评论 -
决策树之 ID3
ID3 是一种用来构建决策树的算法,它根据信息增益来进行属性选择。 关于决策树,请参见:http://blog.csdn.net/bone_ace/article/details/46299681 此处主要介绍 ID3 算法如何利用信息增益选择属性。 信息增益的计算:信息熵:信息熵,简称“熵”。假定训练集中目标属性为CC,CC 的取值为:C1,C2,…,CmC_1,C_2,…,C原创 2015-06-01 16:00:44 · 4364 阅读 · 0 评论 -
朴素贝叶斯
朴素贝叶斯算法是一种基于概率统计的分类方法,它主要利用贝叶斯公式对样本事件求概率,通过概率进行分类。以下先对贝叶斯公式做个了解。 贝叶斯公式条件概率:对于事件A、B,若P(B)>0,则事件A在事件B发生的条件下发生的概率为: P(A|B)=P(AB)P(B)P(A|B) = \frac{P(AB)}{P(B)}贝叶斯公式:将条件概率稍作转化即可得到贝叶斯公式如下: P(A|B)=P(B|A原创 2015-06-05 18:49:22 · 2651 阅读 · 0 评论 -
CNN识别学库bao的验证码
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...原创 2018-05-30 17:08:56 · 6407 阅读 · 9 评论