算法
文章平均质量分 74
立志要成为海贼王的男人
这个作者很懒,什么都没留下…
展开
-
算法学习笔记5-递归方法写一个全排列
全排列面试经常遇到的问题,当场没做出来,有点后悔。主要是递归调用def permutation(a,m,n): if m==n: for i in range(n-1): print a[i], print a[n-1] else: for i in range(m,n): t=a[m] a[m]=a[i] a[i]=t permutati原创 2017-08-17 15:59:19 · 1070 阅读 · 0 评论 -
算法学习笔记6-贝叶斯公式
**贝叶斯公式**首先说几个概念: 1. 条件概率: 事件A在事件B已经发生的条件下发生的概率。 2. 全概率: 某个事件发生的概率可以写成两个条件概率的和。 3. 联合概率: 包含多个条件,且所有条件同时成立的概率 4.边缘概率: 仅与单个随机变量有关的概率 具体看图: 下面给个例子: 有一种疾病,发病率是千分之一,也就是0.1% 现在医院有一种检测技术,正确率是95%,有原创 2017-08-18 14:14:33 · 261 阅读 · 0 评论 -
学习笔记34-k近邻算法
k近邻算法(k-nearest-neighbor kNN) 这是一种分类算法,它的核心思想是:对于新的样本,根据其k个最近邻的样本的类别,通过多数表决等决策规则,决定它的类别。 使用k近邻算法,首先需要确定三个东西: 距离度量,k值的选择,分类决策规则距离度量特征空间中两个样本点之间的距离反映了这两个样本的相似程度,距离有多种表示方法: 一般用Lp表示。 1. 曼哈顿距离(L1距离)原创 2017-09-18 15:05:54 · 653 阅读 · 0 评论 -
算法学习笔记17-经典排序算法
总结基于比较的排序1.冒泡排序 冒泡就是相邻两个元素比较,把较大的数放到后面,每一轮比较之后,最尾端的数一定是最大的。 冒泡排序是稳定的。#python实现def bubble(a): for i in range(len(a)-1): for j in range(len(a)-i-1): if a[j]>a[j+1]:原创 2017-08-25 16:34:54 · 387 阅读 · 0 评论 -
算法学习笔记4-动态规划-背包问题
动态规划(Dynamic Programming)其实动态规划特别抽象,特别难讲。这里也可以参考一篇博文,用讲故事的方式讲了出来。 通过金矿模型介绍动态规划 我的理解就是“用更多的问题来回答问题”。 动态规划是一种求解最优化问题的方法,因为它没有一个确定的数学表达式,或者是明确的解题步骤,说起来会比较抽象,我们只能在实际题目中体会。首先说几个概念吧: 这里先给个栗子: 给定一个整数序列,求原创 2017-09-11 18:13:05 · 204 阅读 · 0 评论 -
学习笔记25-前缀/中缀/后缀表达式
首先,这三种只是对数学计算表达式的不同记法,它们的区别在于操作数跟运算符的位置不同。中缀表达式中缀表达式是一个通用的算术或逻辑公式表示方法。就是我们从小学开始就接触的那种表达式。因为运算符以中缀的形式嵌入在操作数中间,所以叫中缀表达式。比如:(3+4)*5-6对于人脑来说,中缀表达式很直观,是最容易看懂的。但是对于计算机就不一样了,计算机不能像人一样很快区分操作符跟操作数,所以在计算机求表达式的值的原创 2017-09-03 10:41:43 · 305 阅读 · 0 评论 -
学习笔记35-决策树(Decision Tree)
决策树下面以一个简单的二分类任务为例,决定一个西瓜是好瓜还是坏瓜。 首先西瓜有三个属性:色泽,根蒂,敲声 决策树是基于树结构来进行决策的,也就是通过一系列的判断,最终得到结果。如下图,对一个瓜,先看色泽,如果不是青绿色,说明不是好瓜,判断结束。否则,继续看它的根蒂,如果根蒂不是蜷缩的,说明不是好瓜,判断结束。否则,接着看它的敲声,如果敲声不是浊响,说明不是好瓜,判断结束。否则,是好瓜,判断结束。原创 2017-09-20 11:42:11 · 529 阅读 · 0 评论 -
学习笔记39-提升方法(boosting)
提升方法提升方法在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。 首先看两个概念: 1. 弱学习(weakly learnable):一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略高,那么称这个概念是弱可学习的。 2. 强学习(strongly learnable):一个概念,如果存在一个多项式的学习算法能够学习它原创 2017-09-22 11:39:50 · 325 阅读 · 0 评论 -
学习笔记47-找出n个数中第k大的数
用基于比较的排序算法,先做排序再去取数,时间复杂度最简是O(nlogn)。 但是有一种方法可以达到O(n)的复杂度,就是递归的思想,用快速排序的方法,但是每次都只需要查找一半。 下面是python实现:def findNum(a,first,last,dest): if first>=last: return a[dest] i=first j=last原创 2017-11-02 21:25:21 · 722 阅读 · 0 评论 -
学习笔记33-生成式模型-判别式模型
统计学习方法首先需要说明一些基本概念: 1. 统计学习方法 统计学习方法就是对数据进行预测和分析,特别是对未知的新数据进行预测。包括监督学习(Supervised Learning),非监督学习(Unsupervised Learning),半监督学习(Semi-supervised Learning),强化学习(Reinforcement Learning)等。 作为一种计算机使用的方法,肯原创 2017-09-17 23:15:32 · 419 阅读 · 0 评论 -
学习笔记40-哈希码(HashCode)
哈希码哈希码是一种算法,它的目的是让同一个类的对象按照自己不同的特征尽量地有不同的哈希码,但是,不表示不同的对象哈希码完全不同。也可能有相同的情况。在Java中,哈希码代表对象的特征。hashCode在Java中,hashCode是jdk根据对象的地址或者字符串或者是数字算出来的int类型的数值。常见的哈希码的算法有:1:Object类的hashCode :返回对象的内存地址经过处理后的结构,由于原创 2017-09-26 10:08:14 · 6312 阅读 · 1 评论 -
学习笔记30-动态规划
动态规划动态规划是个一直以为自己搞懂了,遇到题目又不会的问题,所以到现在也不敢说自己懂了。 总之,能够将一个大问题分解的,就可以考虑动态规划。就是“用问题来回答问题”。 动态规划有四个性质:如果子问题有答案,那么母问题一定有答案,这叫“最优子结构”。子问题跟母问题之间只有某些参数不同,且参数具有传递性,这叫“子问题重叠”。某些问题没有子问题,本身就有解,也就是不会出现死循环,这叫“边界”。原创 2017-09-12 17:31:17 · 253 阅读 · 0 评论 -
算法学习笔记7-非递归方法写一个全排列
非递归全排列不用递归,只能用循环,在循环里对数组进行排序,每次交换两个元素的位置,直到数组是降序有序排列的。但是需要先对数组进行升序排序,才能输出所有全排列。#coding=utf-8def myreverse(a,i,j): while True: if i>=j: break a[i],a[j]=a[j],a[i]原创 2017-08-18 17:10:29 · 227 阅读 · 0 评论 -
算法学习笔记9-贪心算法
题目描述某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消费金额最大。输入描述输入包括m+2行。 第一行两个整数n(1 <= n <= 50000),m(1 <= m <= 50000) 第二行为n个参数a,即每个桌子可容纳的最大人数,以空格分隔,范围均在32原创 2017-08-19 15:08:47 · 333 阅读 · 0 评论 -
算法学习笔记10-BFS宽度优先搜索
BFSBFS是树遍历的一种算法,宽度优先搜索,也就是每一层的所有节点都遍历,相对的是深度优先搜索DFS,下一篇再说。算法的思想是考虑当前节点的所有可能的下一个节点,所有情况都列出来。具体看题目:题目描述定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示: 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,原创 2017-08-19 16:58:01 · 250 阅读 · 0 评论 -
算法学习笔记12-任意进制数的转换
进制转换将o进制的数m转换为n进制的数输出。可以识别负数。 因为这里是用字符串读取,所以对数的范围没有限制,可以是很大的数。#coding=utf-8import sysdef zero(a): for i in a: if i==0: continue else: return False ret原创 2017-08-20 10:28:46 · 348 阅读 · 0 评论 -
算法学习笔记11-DFS深度优先搜索
DFS问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个1-10的数字。[数字允许重复,测试用例保证无异常数字] 输出: true or false 这道题目用深度优先加递归就能解出来。#coding=utf-8from itertools import permutationsdef dfs(a,n,i): flag=False if原创 2017-08-19 22:20:13 · 293 阅读 · 0 评论 -
学习笔记27-哈弗曼树
哈弗曼树又称赫夫曼树,最优树,就是带权路径最短的树。带权路径最优具体的带权路径怎么算呢? 请看下图: 其实权重可以理解为树的深度,根结点的权重是0,其余的依次加1。哈弗曼编码哈弗曼编码是一种可变字长编码,比如下面将一个字符串编码,根据每个字符出现的频率作为权重,建成一课哈弗曼树:原创 2017-09-05 17:16:09 · 210 阅读 · 0 评论 -
算法学习笔记4-动态规划-背包问题
#coding = utf-8#backpack problem/dynamic problemwhile True: try: time,m=raw_input().split() time=int(time) m=int(m) t=[]#time v=[]#value for i in xrange(m): t1,t2=raw_input().split()原创 2017-08-15 16:06:46 · 351 阅读 · 0 评论 -
算法学习笔记15-哈希算法
Hash表首先说一种数据结构,Hash表,也叫哈希表或者散列表,索引表。它同数组、链表以及二叉排序树等数据结构有很明显的区别,它能够快速定位到想要查找的记录。也就是说,某个元素存储的地址跟这个元素的内容之间存在一种映射。 比如,有一张用户个人信息表,你想查找“李四”这个人,如果是用普通的数组存储,你需要遍历每一个数组元素,时间复杂度是O(n),就算用二叉树,时间复杂度也是O(log n)。但是,如转载 2017-08-24 16:24:42 · 362 阅读 · 0 评论 -
学习笔记28-关联规则
关联规则关联规则是数据挖掘常用的算法,目的是学习不同变量之间的相互关系。比如电商平台中,我们知道经常同时被购买的货物,这就可以当成一种关联规则。项集这些频繁地被同时购买的货物项,称为项集(Item set),也叫频繁项集。 比如,可能“薯条+可乐”和“薯条+汉堡”的组合经常一起出现,那么它们可以组成一个频繁二项集(2-Item set)。 频繁项集有两个定理:1)频繁项子集定理:频繁项集的子集都原创 2017-09-06 16:28:18 · 500 阅读 · 0 评论 -
字符串匹配算法
字符串匹配常见的字符串匹配算法有朴素字符串匹配,KMP算法,BM算法等,对这三种算法总结一下:朴素字符串匹配朴素字符串匹配就是用两层循环,分别对被匹配字符串(string)和匹配模式(pattern)进行遍历,时间复杂度是O((n-m+1)m),用python写的代码如下:def NaiveStringMatch(string,pattern): if len(string)<len(pat原创 2018-03-06 19:19:57 · 321 阅读 · 0 评论