【Algorithms】
文章平均质量分 89
松子茶
关注数字图像处理,数据隐藏与信息隐藏,计算机视觉和机器学习...
展开
-
程序算法艺术与实践:基础知识之函数的渐近的界
众所周知,算法所需的时间应当是随着其输入规模增长的,而输入规模与特定具体问题有关。对大多数问题来说其最自然的度量就是输入中的元素个数。算法的运行时间是指在特定输入时所执行的基本操作数。我们可以得到关于一个关于输入规模n的所需时间的函数。然而可以进一步简化算法的时间分析,我们进行进一步抽象,首先,忽略每条语句的真实代价,通过运行时间的增长率来度量一个算法在时间方面的表现。我们只考虑公式的最高次项,并原创 2015-09-07 21:11:59 · 4410 阅读 · 3 评论 -
有关算法的基本概念
对于给定的问题,一个计算机算法就是用计算机求解这个问题的方法。一般来说,算法是由有限条指令构成,每条指令规定了计算机所要行的有限次运算或者操作。对于一个问题,如果可以通过一个计算机程序,在有限的存储空间内运行有限长的时间而得到正确的结果,则称这个问题是算法可解的。但算法不等于程序,也不等于计算方法。当然,程序也可以作为算法的一种描述,但程序通常还需考虑很多与方法和分析无关的细节问题,这是因为在编写原创 2015-08-20 00:18:22 · 2450 阅读 · 0 评论 -
逻辑与图灵机
计算无处不在。走进一个机房,在服务器排成的一道道墙之间,听着风扇的鼓噪,似乎能嗅出0和1在CPU和内存之间不间断的流动。从算筹算盘,到今天的计算机,我们用作计算的工具终于开始量到质的飞跃。计算机能做的事情越来越多,甚至超越了它们的制造者。上个世纪末,深蓝凭借前所未有的搜索和判断棋局的能力,成为第一台战胜人类国际象棋世界冠军的计算机,但它的胜利仍然仰仗于人类大师赋予的丰富国际象棋知识;而仅仅十余年后原创 2016-03-25 09:35:08 · 1870 阅读 · 0 评论 -
Complexities
This webpage covers the space and time Big-O complexities of common algorithms used in Computer Science. When preparing for technical interviews in the past, I found myself spending hours crawling the internet原创 2016-08-08 22:35:59 · 2093 阅读 · 0 评论 -
Bloom Filter原理
Google的爬虫每天需要抓取大量的网页。于是就有一个问题:每当爬虫分析出一个url的时候,是抓呢,还是不抓呢?如何知道这个url已经爬过了?关于程序算法艺术与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.原创 2016-08-09 11:05:35 · 1802 阅读 · 0 评论 -
找出3的最大倍数的整数集合
题目描述:给一个包含非负整数的数组(长度为n),找出由这些数字组成的最大的3的倍数,没有的话则输出impossible。 例如,如果输入的数组为{8,1,9},输出应为“9 8 1”,并且如果输入的数组为{8,1,7,6,0},输出应为”8760″。关于程序算法艺术与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.原创 2016-08-20 22:00:22 · 3395 阅读 · 0 评论 -
分治策略Divide and Conquer
对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解.关于程序算法艺术与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.原创 2016-08-21 15:35:16 · 5712 阅读 · 0 评论 -
程序算法艺术与实践引导
原本计划在假期中总结完,结果速度太悠哉了,至今没整理完 。"是否具有算法知识与技术的坚实基础是区分真正熟练的程序员与初学者的一个特征(《算法导论》)". Charles Leiserson教授在MIT算法导论第一堂课说的:“如果你想成为一个编程高手,只要两年中每天坚持编程,你就能成为编程高手。如果你想成为一名世界级的程序员,你既可以十年如一日每天坚持编程,也可以两年中每天编程,然后上一门算法课”。原创 2015-08-20 00:17:53 · 2087 阅读 · 1 评论 -
深入解析快速排序(Quick Sort)
快速排序是由图灵奖获得者、计算机语言设计大佬C. A. R. Hoare在他26岁时提出的。说起C. A. R. Hoare老爷爷,可能很多人的第一印象就是快速排序,但是快排仅仅是他人生中非常小的成就而已。例如,他在1978年提出的Communicating Sequential Processes(CSP)理论,则深深的影响了并行程序设计,Go语言中的Goroutine就是这种典范。原创 2016-08-10 14:03:16 · 5996 阅读 · 1 评论 -
动态规划
动态规划(DP)[1]通过分解成子问题解决了给定复杂的问题,并存储子问题的结果,以避免再次计算相同的结果。我们通过下面这个问题来说明这两个重要属性:重叠子问题和最优子结构。原创 2016-10-28 17:01:50 · 3946 阅读 · 1 评论 -
回溯法与分支限界
回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。原创 2016-11-30 19:25:02 · 15702 阅读 · 0 评论 -
关于 AlphaGo 论文的阅读笔记
Deepmind 公司在 Nature 杂志发表论文 Mastering the game of Go with deep neural networks and tree search,介绍了 AlphaGo 程序的细节。本文是对这篇论文的阅读笔记。AlphaGo 神经网络构成AlphaGo 总体上由两个神经网络构成,以下我把它们简单称为「两个大脑」,这并非原文中原创 2016-03-12 10:20:39 · 6851 阅读 · 0 评论 -
图灵测试,测的到底是什么?
2014年6月7日发生了一件事情:聊天程序“尤金·古斯特曼”(Eugene Goostman)在英国皇家学会举行的2014图灵测试大会上冒充一个13岁乌克兰男孩而骗过了33%的评委,从而按照图灵当初的定义,“通过”了图灵测试。尤金的在线对话页面,不幸的是因为这一事件给服务器带来的压力,该网站已经几天无法访问了……但是,通过了测试又怎么样呢?说明了什么问题呢?原创 2016-03-20 17:11:12 · 9240 阅读 · 0 评论 -
24点计算问题
问题描述:N个1到13之间的自然数,找出所有能通过加减乘除计算(每个数有且只能用一次)得到24的组合?计算24点常用的算法有三种,第一种方法:任取两个数,计算后,将结果放回去,再从剩下的数中任取两个,如此反复直到只剩下一个数;第二种方法:先构建前缀/后缀表达式,再计算该表达式;第三种方法是用集合保存中间结果,集合间两两进行合并计算得到新集合(或者对给定的一个集合,对其所有的子集合进行合并计算)如果要推广到n个数,有两种思路:① 采用前缀/后缀表达式。相当于将n个数用n-1个括号括起来,其数目就是一个catl原创 2015-01-09 19:41:57 · 4763 阅读 · 2 评论 -
程序算法艺术与实践:经典排序算法之桶排序
桶排序Bucket Sort从1956年就开始被使用,该算法的基本思想是由E.J.Issac R.C.Singleton提出来。本博介绍BucketSort算法相关知识。算法描述与伪代码假设输入的待排序元素是等可能的落在等间隔的值区间内.一个长度为N的数组使用桶排序, 需要长度为N的辅助数组. 等间隔的区间称为桶, 每个桶内落在该区间的元素. 桶排序是基数排序的一种归纳结果.算法的主要思想: 待原创 2015-09-19 19:27:13 · 2471 阅读 · 0 评论 -
程序算法艺术与实践:经典排序算法之插入排序
插入排序(Insertion Sort)的基本思想是每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。基本思想与伪代码经过j-1遍处理后,A[1..j-1]己排好序。第j遍处理仅将A[j]插入L[1..j-1]的适当位置,使得A[1..j]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较A[j]和A[j-1],如果A[j-原创 2015-09-19 13:49:32 · 2221 阅读 · 0 评论 -
程序算法艺术与实践:递归策略之矩阵乘法问题
矩阵(Matrix)是指纵横排列的二维数据表格,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。并且在ACM竞赛,有很多涉及到矩阵知识的题。许多算法都会结合矩阵来处理,而比较具有代表性的矩阵算法有:矩阵快速幂、高斯消元等等.关于程序算法艺术与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.原创 2015-09-16 22:10:38 · 4272 阅读 · 1 评论 -
程序算法艺术与实践:递归策略之Fibonacci数列
Fibonacci数列的数学表达式F(n) = F(n-1) + F(n-2),F(1) = 1 ,F(2) = 1函数fib会等待好久,其它的都能很快得出结果,由于我的程序都没有涉及到高精度,所以要是求大数据的话,可以通过取模来获得结果的后4位来测试效率与正确性。另外斐波那契数列在实际工作中应该用的很少,尤其是当数据n很大的时候,所以综合考虑基本普通的非递归O(n)方法就很好了,没有必要用矩阵乘法。.关于程序算法艺术与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.原创 2015-09-16 18:08:04 · 1926 阅读 · 1 评论 -
程序算法艺术与实践:递归策略基本的思想
分治策略(Divide and Conquer)是一种常用的算法技术,使用分治策略设计的算法通常是递归算法.很多时候我们看明白一个复杂的递归都有点费时间,尤其对模型所描述的问题概念不清的时候,想要自己设计一个递归那么就更是有难度了。如果递归仅仅是循环,估计现在我们就看不到递归了。递归之所以现在还存在是因为递归可以产生无限循环体.用归纳法来理解递归数学都不差的我们,第一反应就是递归在数学上的模型是什原创 2015-09-20 21:04:54 · 1835 阅读 · 1 评论 -
基本的排序算法原理与实现
本节主要介绍基本的排序算法 ,即:插入排序,选择排序,冒泡排序.插入排序首先考虑data中的前两个元素,即data[0]和data[1]。如果它们的次序颠倒了,就交换它们。然后,考虑第三个元素data[2],将其插入到合适的位置上。如果data[2]同时小于data[0]和data[1],那么data[0]和data[1]都要移动一个位置;data[0]放在位置1上,data[1]放在位置2上,而将data[2]放在位置0上。如果data[2]小于data[1],而不于data[0],那么只须把data[1原创 2013-08-25 18:59:32 · 3042 阅读 · 0 评论 -
B-和B+树
B-树每个节点上包含着数据和指针,每个指针指向其一个子节点的位置, B-树的查找需要一次对每个节点进行二分查找,直至找到或返回null。通常,可以引入布朗过滤器等方式加速查找。B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点(其搜索性能等价于在关键字全集内做一原创 2013-08-01 16:33:59 · 3247 阅读 · 0 评论 -
程序算法艺术与实践:递归策略之递归,循环与迭代
众所周知,递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的,同时影响效率的。递归是利用系统的堆栈保存函数当中的局部变量来解决问题的。递归就是在栈处理栈上一堆的指针指向内存中的对象,这些对象一直不被释放,直到递归执行到最后一次后,才释放空间.关于程序算法艺术与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.原创 2015-09-24 08:40:55 · 2919 阅读 · 0 评论 -
PrincetonUniversity-Coursera 算法:算法简介
Course OverviewWhat is this course?Intermediate-level survey course.Programming and proble solving,with applicationsAlgorithm:method for solving a problemData struvture: method to stroe informationWhy原创 2016-02-13 11:56:23 · 2107 阅读 · 0 评论 -
贪心法
贪心法又称贪婪法, 在对问题求解时,总是做出在当前看来是最好的选择,或者说是:总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。原创 2016-11-28 14:20:25 · 4504 阅读 · 0 评论