随笔分类 - [41]Algorithm算法
-
2048-AI程序算法分析
摘要:张洋:2048-AI程序算法分析 针对目前火爆的2048游戏,有人实现了一个 AI 程序,可以以较大概率(高于 90%)赢得游戏,并且作者在 stackoverflow 上简要介绍了 AI 的算法框架和实现思路。但是这个回答主要集中在启发函数的选取上,对 AI 用到的核心算法并没有仔细说明。这篇文章将主要分为两个部分,第一部分介绍其中用到的基础算法,即 Minimax 和 Alpha-beta 剪枝;第二部分分析作者具体的实现。 基础算法 2048 本质上可以抽象成信息对称双人对弈模型(玩家向四个方向中的一个移动,然后计算机在某个空格中填入 2 或4)。这里“信息对称”是指在任一时刻对弈... 阅读全文
-
数据分析R语言1
摘要:数据分析R语言无意中发现网上的一个数据分析R应用教程,看了几集感觉还不错,本文做一个学习笔记(知识点来源:视频内容+R实战+自己的理解),视频详细的信息请参考http://www.itao521.com/course/34,非常不错的网站,站长的Q群是323370861(这个群的童鞋们都很给力,学习也很上进,各种团购买hadoop,nosql,spark的视频学习),我网站会员ID是515,也欢迎各方朋友交流,OK,开始 统计的一些基础概念,如下图所示, 数据分析常用到的一些算法(下图貌似是Spss modeler里面的缩略图),常用的聚类,分类,维度归约,回归预测,时间序列算法都有一... 阅读全文
-
数据分析R语言1
摘要:数据分析R语言无意中发现网上的一个数据分析R应用教程,看了几集感觉还不错,本文做一个学习笔记(知识点来源:视频内容+R实战+自己的理解),视频详细的信息请参考http://www.itao521.com/course/34,非常不错的网站,站长的Q群是323370861(这个群的童鞋们都很给力,学习也很上进,各种团购买hadoop,nosql,spark的视频学习),我网站会员ID是515,也欢迎各方朋友交流,OK,开始 统计的一些基础概念,如下图所示, 数据分析常用到的一些算法(下图貌似是Spss modeler里面的缩略图),常用的聚类,分类,维度归约,回归预测,时间序列算法都有一... 阅读全文
-
块状链表
摘要:经典算法题每日演练——第二十五题 块状链表 在数据结构的世界里,我们会认识各种各样的数据结构,每一种数据结构都能解决相应领域的问题,每一种数据结构都像是降龙十八掌中的某一掌,掌掌毙命。。。 当然每个数据结构,有他的优点,必然就有它的缺点,那么如何创造一种数据结构来将某两种数据结构进行扬长避短,那就非常完美了。这样的数据结构也有很多,比如:双端队列,还有就是今天讲的 块状链表, 我们都知道 数组 具有 O(1)的查询时间,O(N)的删除,O(N)的插入。。。 链表 具有 O(N)的查询时间,O(1)的删除,O(1)的插入。。。 那么现在我们就有想法了,何不让“链表”和“数组”结... 阅读全文
-
冒泡排序最佳情况的时间复杂度,为什么是O(n)
摘要:冒泡排序最佳情况的时间复杂度,为什么是O(n)我在许多书本上看到冒泡排序的最佳时间复杂度是O(n),即是在序列本来就是正序的情况下。但我一直不明白这是怎么算出来的,因此通过阅读《算法导论-第2版》的2.2节,使用对插入排序最佳时间复杂度推算的方法,来计算冒泡排序的复杂度。1. 《算法导论》2.2中对插入排序最佳时间复杂度的推算 在最好情况下,6和7总不被执行,5每次只被执行1次。因此, 时间复杂度为O(n)2. 冒泡排序的时间复杂度 2.1 排序代码public void bubbleSort(int arr[]) { for(int i = 0, len = arr.leng... 阅读全文
-
常用的排序算法的时间复杂度和空间复杂度
摘要:常用的排序算法的时间复杂度和空间复杂度常用的排序算法的时间复杂度和空间复杂度排序法最差时间分析平均时间复杂度稳定度空间复杂度冒泡排序O(n2)O(n2)稳定O(1)快速排序O(n2)O(n*log2n)不稳定O(log2n)~O(n)选择排序O(n2)O(n2)稳定O(1)二叉树排序O(n2)O(n*log2n)不一顶O(n)插入排序O(n2)O(n2)稳定O(1)堆排序O(n*log2n)O(n*log2n)不稳定O(1)希尔排序OO不稳定O(1)1、时间复杂度(1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测 阅读全文
-
二叉树
摘要:二叉树系列心浮气躁,纵然才俊终仲永。最近看了不少面试题,总觉得题解太过粗糙,在此试解几题,打发无聊。内容包括各种关于二叉树的面试题: 图1为二叉树示例图,二叉树的数据结构如下:typedef struct _BinaryTree{ int value; struct _BinaryTree *left; struct _BinaryTree *right;}BinaryNode, *BinaryTree;图1 二叉树 二叉树的遍历基本上是解决所有二叉树面试题的源,在解下列题时,都将极力不使用递归(或给出非递归解),相信递归之简单与之弊病谁都了然,本文将从遍历开始……1 二叉树... 阅读全文
-
C#排序算法
摘要:随笔- 41 文章- 0 评论- 25C#排序算法小结前言算法这个东西其实在开发中很少用到,特别是web开发中,但是算法也很重要,因为任何的程序,任何的软件,都是由很多的算法和数据结构组成的。但是这不意味着算法对于每个软件设计人员的实际工作都是很重要的。每个项目特点和需求特殊也导致算法运用场景上不同。但是个人觉得算法运用的好的话会给自己在程序设计的时候提供比较好的思路。下面就对一些排序算法小结一下,就当做自己的一个笔记吧。插入排序1.简介插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相 阅读全文
-
函数、极限、连续
摘要:1 - 函数、极限、连续(1)(间断点、左右极限)当 |x| 1 时,。(函数有界性判定)设f(x)在开区间(a,b)内连续,若及存在,则f(x)在(a,b)内有界。例题 讨论函数在上的有界性。由及可知f(x) = f(-x),所以f(x)是偶函数。只需证明f(x)在上有界。又于是,对于(可以为任意正数但必须确定下来),存在A>0,当x>A时,有。即当x>A时,有00,使得任意有。取M = max{1,M1}则对任意有。从而可知:对任意有。注意:1、要判断函数的有界性先考虑在间断点、无穷远点的极限(涉及左右极限);2、不用求导数、单调性之类,这两步已经证明了有界性。(周期函数 阅读全文
-
合并排序
摘要:三 合并排序合并排序,顾名思义,就是通过将两个有序的序列合并为一个大的有序的序列的方式来实现排序。合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并。合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到的。他还是一种稳定性排序,也就是相等的元素在序列中的相对位置在排序前后不会发生变化。他的唯一缺点是,需要利用额外的N的空间来进行排序。一 原理合并排序依赖于合并操作,即将两个已经排序的序列合并成一个序列,具体的过程如下:申请空间,使其大小为两个已经排序序列之和,然后将待排序数组复制到该数组中。设定 阅读全文
-
排序算法的C#实现
摘要:8种主要排序算法的C#实现新的一年到了,很多园友都辞职要去追求更好的工作环境,我也是其中一个,呵呵!最近闲暇的时候我开始重温一些常用的算法。老早就买了《算法导论》,一直都没啃下去。这本书确实很好,只是太难读了,总是读了几章就又读不下去了!工作上也几乎用不到。我这段时间发现看这些排序算法比以前容易了很多,就借此机会将它们整理总结起来。一是方便以后重温,二是可以应对笔试面试。同时也希望这篇博文可以帮助各位刚辞职和正在学习排序算法的园友。PS:有可能实现的代码并不是最优的,如果有什么错误或者值得改进的地方,还请大家帮忙指出。简介排序算法是我们编程中遇到的最多的算法。目前主流的算法有8种。平均时间复杂 阅读全文
-
Hash算法
摘要:一致性Hash算法在Memcached中的应用前言 大家应该都知道Memcached要想实现分布式只能在客户端来完成,目前比较流行的是通过一致性hash算法来实现.常规的方法是将server的hash值与server的总台数进行求余,即hash%N,这种方法的弊端是当增减服务器时,将会有较多的缓存需要被重新分配且会造成缓存分配不均匀的情况(有可能某一台服务器分配的很多,其它的却很少). 今天分享一种叫做”ketama”的一致性hash算法,它通过虚拟节点的概念和不同的缓存分配规则有效的抑制了缓存分布不均匀,并最大限度地减少服务器增减时缓存的重新分布。实现思路 假设我们现在有N台Memca... 阅读全文
-
快速得到栈、队列的最大值
摘要:快速得到栈、队列的最大值特点栈——先进后出队列——后进先出思路1. 快速得到最大值的栈结构需要两个数组:一个数组stackItem保存栈的元素,另一个数组link2NextMaxValueIndex保存下一个最大值的位置两个指针:一个为stackTop指向栈顶,另一个为maxValueIndex指向最大值的下标操作插入时:比较插入元素与最大值的大小,如果比最大值还大呢,link2NextMaxValueIndex指向原来最大值的位置(即maxValueIndex),而maxValueIndex变为现在插入元素的位置;否则link2NextMaxValueIndex指向-1删除时:删除元素的位置 阅读全文
-
随机数的算法
摘要:获取相同概率随机数的算法这几天在做公司年会的一个抽奖软件,开始做的的时候,认为算法是很简单的,把员工的数据放进list里,把list的标号作为需要获取的随机数,根据得到的随机数就确定是谁中奖。后来测试发现,随机数的分布是非常不均匀的。后来才知道,原来计算机获取的随机数都是伪随机数,当抽奖的速度非常快的时候,获取的随机数是非常不均匀的,所以在每次抽奖的时候要添加延时。后来重新设计算法,最终实现了。算法原理跟二分查找的过程有点像。一枚硬币抽中正、反面的概率是一样,当抽样的次数无限增多,抽中的概率是50%。代码如下:public partial class MainWindow : Window . 阅读全文
-
基本排序算法
摘要:浅谈算法和数据结构: 二 基本排序算法本篇开始学习排序算法。排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序、买火车票会按照出发时间或者时长排序、买东西会按照销量或者好评度排序、查找文件会按照修改时间排序等等。在计算机程序设计中,排序和查找也是最基本的算法,很多其他的算法都是以排序算法为基础,在一般的数据处理或分析中,通常第一步就是进行排序,比如说二分查找,首先要对数据进行排序。在Donald Knuth的计算机程序设计的艺术这四卷书中,有一卷是专门介绍排序和查找的。排序的算法有很多,在维基百科上有这么一个分类,另外大家有兴趣也可以直接上维基百科上看相关算法 阅读全文
-
栈和队列
摘要:栈和队列浅谈算法和数据结构: 一 栈和队列最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因。另外普林斯顿大学在Coursera上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的。计算机程序离不开算法和数据结构,本文简单介绍栈(Stack)和队列(Queue)的实现,.NET中与之相关的数据结构,典型应用等,希望能加深自己对这两个简单数据结构的理解。1.基本概念概念很简单,栈 (Stack)是一种 阅读全文
-
一年去雾算法研究
摘要:一年去雾算法研究的总结。从最开始的Crimm Imageshop中最简单的去雾功能开始,到前不久为止研究的诸多去雾算法,再到近日和一些朋友的关于去雾经验的交流,感觉自己对这个方面的研究已经止步了,现对这些算法做个简单的总结。 本博客中共给出了6种有去雾功能的算法: (1)基于何凯明博士提出的暗通道去雾算法; (2)基于中值滤波(也可使用高斯\均值\双边之类的)的去雾; (3)基于均值滤波的实时去雾算法; (4)基于多尺度Retinex图像增强技术; (5)基于自适应直方图均衡化算法; (6)基于自适应对比度及色阶增强的图像算法; 其中前三种算法属于基于去雾物理模型的,后三种属于... 阅读全文
-
八皇后-递归
摘要:八皇后-递归重写八皇后,最开始用双层循环,然后用递归重写,还是递归易懂,优雅 1 #include 2 #include 3 #include 4 #include 5 #include "stack_seq_generic.h" 6 7 #define QUEEN 4 8 9 typedef struct{ 10 int x; 11 int y; 12 } Point; 13 14 BOOL in_border(int x){ 15 if (x>=0 && xtop; 23 Point *base = (Point *)s->b... 阅读全文
-
Algorithm lecture
摘要:当前标签: lecture组合数求法讲解BLADEVIL 2014-01-08 18:59 阅读:3 评论:0mobius反演讲解BLADEVIL 2014-01-08 18:13 阅读:4 评论:001分数规划讲解BLADEVIL 2014-01-08 17:05 阅读:15 评论:0动态树之LCT(link-cut tree)讲解BLADEVIL 2014-01-08 17:01 阅读:259 评论:0莫队算法讲解BLADEVIL 2014-01-08 16:11 阅读:5 评论:0树链剖分之点剖分(点分治)讲解BLADEVIL 2014-01-08 13:15 阅读:2 评论:0树链剖分 阅读全文
-
图模型的精确推理
摘要:图模型的精确推理前言: 这次实验完成的是图模型的精确推理。exact inference分为2种,求边缘概率和求MAP,分布对应sum-product和max-sum算法。这次实验涉及到的知识点很多,不仅需要熟悉图模型的representation,而且还需明白图模型的inference理论,大家可参考coursera课程:Probabilistic Graphical Models的课件和视频。多花点功夫去理解每行代码,无形之中会收获不少。新年第一篇博客,继续加油! 算法流程: Sum-product求条件概率过程为(inference I): (a):输入factor list F... 阅读全文