随笔分类 -  算法学习笔记

上一页 1 2 3 下一页
算法学习笔记
编程艺术第二十三~四章&十一续:杨氏矩阵查找,倒排索引关键词Hash编码
摘要:作者:July、yansha。编程艺术室出品。出处:结构之法算法之道。前言 本文阐述两个问题,第二十三章是杨氏矩阵查找问题,第二十四章是有关倒排索引中关键词Hash编码的问题,主要要解决不重复以及追加的功能,同时也是经典算法研究系列十一、从头到尾彻底解析Hash表算法之续。 OK,有任何问题,也欢迎随时交流或批评指正。谢谢。第二十三章、杨氏矩阵查找杨氏矩阵查找 先看一个来自算法导论习题里6-3与剑指offer的一道编程题(也被经常用作面试题,本人此前去搜狗二面时便遇到了): 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这... 阅读全文
posted @ 2013-05-16 00:24 知识天地 阅读(347) 评论(0) 推荐(0) 编辑
程序员编程艺术第二十一~二章:发帖水王及扩展,与最短摘要生成(12.07修订)
摘要:前言 咱们先来看两个问题: 第一个问题来自编程之美上,Tango是微软亚洲研究院的一个试验项目,如图1所示。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的ID也在表中,你能快速找出这个传说中的Tango水王吗? 图1Tango 第二个问题来自各位读者的手中,你我在百度或谷歌搜索框中敲入本博客名称的前4个字“结构之法”,便能在第一个选项看到本博客的链接,如下... 阅读全文
posted @ 2013-05-16 00:23 知识天地 阅读(569) 评论(0) 推荐(0) 编辑
编程艺术第十六~第二十章:全排列/跳台阶/奇偶调序,及一致性Hash算法
摘要:作者:July、2011.10.16。出处:http://blog.csdn.net/v_JULY_v。引言 最近这几天闲职在家,一忙着投简历,二为准备面试而搜集整理各种面试题。故常常关注个人所建的Algorithms1-14群内朋友关于笔试,面试,宣讲会,offer,薪资的讨论以及在群内发布的各种笔/面试题,常感言道:咱们这群人之前已经在学校受够了学校的那种应试教育,如今出来找工作又得东奔西走去参加各种笔试/面试,着实亦不轻松。幻想,如果在企业与求职者之间有个中间面试服务平台就更好了。 ok,闲话少扯。在上一篇文章中,已经说过,“个人正在针对那100题一题一题的写文章,多种思路,不断优化.. 阅读全文
posted @ 2013-05-16 00:22 知识天地 阅读(661) 评论(0) 推荐(0) 编辑
程序员编程艺术第十二~十五章:IP访问次数,回文等问题(初稿)
摘要:程序员编程艺术第十二~十五章:中签概率,IP访问次数,回文等问题(初稿)作者:上善若水.qinyu,BigPotato,luuillu,well,July。编程艺术室出品。前言 本文的全部稿件是由我们编程艺术室的部分成员:上善若水.qinyu,BigPotato,luuillu,well,July共同完成,共分4个部分,即4道题:第一部分、从一道题,漫谈数据结构、以及压缩、位图算法,由上善若水.qinyu完成,第二部分、遍历n个元素取出等概率随机取出其中之一元素,由BigPotato完成,第三部分、提取出某日访问百度次数最多的那个IP,由luuillu完成,第四部分、回文判断,由well完.. 阅读全文
posted @ 2013-05-16 00:21 知识天地 阅读(743) 评论(0) 推荐(0) 编辑
程序员编程艺术第十一章:最长公共子序列(LCS)问题
摘要:程序员编程艺术第十一章:最长公共子序列(LCS)问题0、前言 程序员编程艺术系列重新开始创作了(前十章,请参考程序员编程艺术第一~十章集锦与总结)。回顾之前的前十章,有些代码是值得商榷的,因当时的代码只顾阐述算法的原理或思想,所以,很多的与代码规范相关的问题都未能做到完美。日后,会着力修缮之。 搜遍网上,讲解这个LCS问题的文章不计其数,但大多给读者一种并不友好的感觉,稍感晦涩,且代码也不够清晰。本文力图避免此些情况。力保通俗,阐述详尽。同时,经典算法研究系列的第三章(三、dynamic programming)也论述了此LCS问题。有任何问题,欢迎不吝赐教。第一节、问题描述 什么是最长公共. 阅读全文
posted @ 2013-05-16 00:19 知识天地 阅读(810) 评论(0) 推荐(0) 编辑
程序员编程艺术:第十章、如何给10^7个数据量的磁盘文件排序
摘要:作者:July,yansha,5,编程艺术室。出处:http://blog.csdn.net/v_JULY_v。前奏 经过几天的痛苦沉思,最终决定,把原程序员面试题狂想曲系列正式更名为程序员编程艺术系列,同时,狂想曲创作组更名为编程艺术室。之所以要改名,我们考虑到三点:1、为面试服务不能成为我们最终或最主要的目的,2、我更愿把解答一道道面试题,ACM题等各类程序设计题目的过程,当做一种艺术来看待,3、艺术的提炼本身是一个非常非常艰难的过程,但我们乐意接受这个挑战。 ok,如果任何人对本编程艺术系列有任何意见,或发现了本编程艺术系列任何问题,漏洞,bug,欢迎随时提出,我们将虚心接受并感激不尽, 阅读全文
posted @ 2013-05-16 00:17 知识天地 阅读(521) 评论(0) 推荐(0) 编辑
程序员编程艺术:第九章、闲话链表追赶问题
摘要:作者:July、狂想曲创作组。出处:http://blog.csdn.net/v_JULY_v。前奏有这样一个问题:在一条左右水平放置的直线轨道上任选两个点,放置两个机器人,请用如下指令系统为机器人设计控制程序,使这两个机器人能够在直线轨道上相遇。(注意两个机器人用你写的同一个程序来控制)。 指令系统:只包含4条指令,向左、向右、条件判定、无条件跳转。其中向左(右)指令每次能控制机器人向左(右)移动一步;条件判定指令能对机器人所在的位置进行条件测试,测试结果是如果对方机器人曾经到过这里就返回true,否则返回false;无条件跳转,类似汇编里面的跳转,可以跳转到任何地方。 ok,这道很有意思的 阅读全文
posted @ 2013-05-16 00:15 知识天地 阅读(567) 评论(0) 推荐(0) 编辑
程序员编程艺术:第八章、从头至尾漫谈虚函数
摘要:作者:July。出处:http://blog.csdn.net/v_JULY_v。前奏 有关虚函数的问题层出不穷,有关虚函数的文章千篇一律,那为何还要写这一篇有关虚函数的文章呢?看完本文后,相信能懂其意义之所在。同时,原狂想曲系列已经更名为程序员编程艺术系列,因为不再只专注于“面试”,而在“编程”之上了。ok,如果有不正之处,望不吝赐教。谢谢。第一节、一道简单的虚函数的面试题题目要求:写出下面程序的运行结果?//谢谢董天喆提供的这道百度的面试题#include<iostream>usingnamespacestd;classA{public:virtualvoidp(){cout& 阅读全文
posted @ 2013-05-16 00:14 知识天地 阅读(509) 评论(0) 推荐(0) 编辑
程序员编程艺术:第七章、求连续子数组的最大和
摘要:作者:July。出处:http://blog.csdn.net/v_JULY_v。前奏希望更多的人能和我一样,把本狂想曲系列中的任何一道面试题当做一道简单的编程题或一个实质性的问题来看待,在阅读本狂想曲系列的过程中,希望你能尽量暂时放下所有有关面试的一切包袱,潜心攻克每一道“编程题”,在解决编程题的过程中,好好享受编程带来的无限乐趣,与思考带来的无限激情。--By@July_____。原狂想曲系列已更名为:程序员编程艺术系列。原狂想曲创作组更名为编程艺术室。编程艺术室致力于以下三点工作:1、针对一个问题,不断寻找更高效的算法,并予以编程实现。2、解决实际中会碰到的应用问题,如第十章、如何给10 阅读全文
posted @ 2013-05-16 00:13 知识天地 阅读(221) 评论(0) 推荐(0) 编辑
程序员编程艺术:第六章、求解500万以内的亲和数
摘要:作者:上善若水、July、yansha。出处:http://blog.csdn.net/v_JULY_v。前奏 本章陆续开始,除了继续保持原有的字符串、数组等面试题之外,会有意识的间断性节选一些有关数字趣味小而巧的面试题目,重在突出思路的“巧”,和“妙”。本章亲和数问题之关键字,“500万”,“线性复杂度”。第一节、亲和数问题题目描述:求500万以内的所有亲和数如果两个数a和b,a的所有真因数之和等于b,b的所有真因数之和等于a,则称a,b是一对亲和数。例如220和284,1184和1210,2620和2924。分析: 首先得明确到底是什么是亲和数?亲和数问题最早是由毕达哥拉斯学派发现和研究的 阅读全文
posted @ 2013-05-16 00:12 知识天地 阅读(674) 评论(0) 推荐(0) 编辑
程序员编程艺术:第五章、寻找满足和为定值的两个或多个数
摘要:作者:July,yansha,zhouzhenren。 致谢:微软100题实现组,编程艺术室。 微博:http://weibo.com/julyweibo 。 出处:http://blog.csdn.net/v_JULY_v。 wiki:http://tctop.wikispaces.com/。------------------------------前奏 希望此编程艺术系列能给各位带来的是一种方法,一种创造力,一种举一反三的能力。本章依然同第四章一样,选取比较简单的面试题,恭祝各位旅途愉快。同样,有任何问题,欢迎不吝指正。谢谢。第一节、寻找和为定值的两个数第14题(数组):题目:输入一个数 阅读全文
posted @ 2013-05-16 00:10 知识天地 阅读(590) 评论(0) 推荐(0) 编辑
程序员编程艺术:第四章、现场编写类似strstr/strcpy/strpbrk的函数
摘要:作者:July。 说明:如果在博客中代码使用了\n,csdn blog系统将会自动回给我变成/n。据后续验证,可能是原来旧blog版本的bug,新版已不存在此问题。至于,本文代码,日后统一修正。July、2012.05.02。 微博:http://weibo.com/julyweibo。 出处:http://blog.csdn.net/v_JULY_v。 wiki:http://tctop.wikispaces.com/。----------------------------------------------前奏 有网友向我反应,之前三章(http://t.cn/hgVPmH)的面试题目, 阅读全文
posted @ 2013-05-16 00:09 知识天地 阅读(533) 评论(0) 推荐(0) 编辑
程序员编程艺术:三之三续、求数组中给定下标区间内的第K小(大)元素
摘要:作者:July、上善若水、编程艺术室。出处:http://blog.csdn.net/v_JULY_v。前奏 原狂想曲系列已更名为:程序员编程艺术系列。原狂想曲创作组更名为编程艺术室。编程艺术室致力于以下三点工作:1、针对一个问题,不断寻找更高效的算法,并予以编程实现。2、解决实际中会碰到的应用问题,如第十章、如何给磁盘文件排序。3、经典算法的研究与实现。总体突出一点:编程,如何高效的编程解决实际问题。欢迎有志者加入。 ok,扯远了。在上一章,我们介绍了第十章、如何给10^7个数据量的磁盘文件排序,下面介绍下本章的主题。我们知道,通常来讲,寻找给定区间内的第k小(大)的元素的问题是ACM中一类 阅读全文
posted @ 2013-05-16 00:08 知识天地 阅读(599) 评论(0) 推荐(0) 编辑
十四、第三章再续:快速选择SELECT算法的深入分析与实现
摘要:作者:July。出处:http://blog.csdn.net/v_JULY_v。前言 经典算法研究系列已经写了十三个算法,共计22篇文章(详情,见这:十三个经典算法研究与总结、目录+索引),我很怕我自己不再把这个算法系列给继续写下去了。沉思良久,到底是不想因为要创作狂想曲系列而耽搁这个经典算法研究系列,何况它,至今反响还不错。 ok,狂想曲第三章提出了一个算法,就是快速选择SELECT算法,关于这个SELECT算法通过选取数组中中位数的中位数作为枢纽元能保证在最坏情况下,亦能做到线性O(N)的时间复杂度的证明,在狂想曲第三章也已经给出。 本文咱们从快速排序算法分析开始(因为如你所知,快速选择 阅读全文
posted @ 2013-05-16 00:07 知识天地 阅读(595) 评论(0) 推荐(0) 编辑
程序员编程艺术第一章、左旋转字符串
摘要:作者:July,yansha。时间:二零一一年四月十四日。微博:http://weibo.com/julyweibo。出处:http://blog.csdn.net/v_JULY_v。-------------------------------------------目录序前言第一节、左旋转字符串第二节、两个指针逐步翻转第三节、通过递归转换,缩小问题之规模第四节、stl::rotate算法的步步深入第五节、总结前言 本人整理微软等公司面试100题系列,包括原题整理,资源上传,帖子维护,答案整理,勘误,修正与优化工作,包括后续全新整理的80道,总计180道面试题,已有半年的时间了。 关于这18 阅读全文
posted @ 2013-05-16 00:05 知识天地 阅读(484) 评论(0) 推荐(0) 编辑
程序员编程艺术:第三章、寻找最小的k个数
摘要:作者:July,zhouzhenren,yansha。 致谢:微软100题实现组,狂想曲创作组。 时间:2011年05月08日 微博:http://weibo.com/julyweibo。 出处:http://blog.csdn.net/v_JULY_v。 wiki:http://tctop.wikispaces.com/。-----------------------------------------------前奏 在上一篇文章,程序员面试题狂想曲:第三章、寻找最小的k个数中,后来为了论证类似快速排序中partition的方法在最坏情况下,能在O(N)的时间复杂度内找到最小的k个数,而. 阅读全文
posted @ 2013-05-16 00:04 知识天地 阅读(1028) 评论(0) 推荐(0) 编辑
程序员编程艺术:第二章、字符串是否包含及匹配/查找/转换/拷贝问题
摘要:作者:July,yansha。时间:二零一一年四月二十三日。致谢:老梦,nossiac,Hession,Oliver,luuillu,雨翔,啊菜,及微软100题实现小组所有成员。微博:http://weibo.com/julyweibo。出处:http://blog.csdn.net/v_JULY_v。-------------------------------------------目录曲之前奏第一节、一道俩个字符串是否包含的问题 1.1、O(n*m)的轮询方法 1.2、O(mlogm)+O(nlogn)+O(m+n)的排序方法 1.3、O(n+m)的计数排序方法第二节 2.1、O(n+m 阅读全文
posted @ 2013-05-16 00:02 知识天地 阅读(441) 评论(0) 推荐(0) 编辑
六之再续:KMP算法之总结篇(必懂KMP)
摘要:引记 此前一天,一位MS的朋友邀我一起去与他讨论快速排序,红黑树,字典树,B树、后缀树,包括KMP算法,唯独在讲解KMP算法的时候,言语磕磕盼盼,我想,原因有二:1、博客内的东西不常回顾,忘了不少;2、便是我对KMP算法的理解还不够彻底,自不用说讲解自如,运用自如了。所以,特再写本篇文章。由于此前,个人已经写过关于KMP算法的两篇文章,所以,本文名为:KMP算法之总结篇。本文分为二个部分:第一部分、再次回顾普通的BF算法与KMP算法各自的时间复杂度,并两相对照各自的匹配原理;第二部分、通过我此前一篇文章的引用,用图从头到尾详细阐述KMP算法中的next数组求法,并运用求得的next数组写出K. 阅读全文
posted @ 2013-05-15 22:12 知识天地 阅读(546) 评论(0) 推荐(0) 编辑
1,2,...n n个数m个丢失,找出丢失的数
摘要:最简单的方法,开个O(n)的空间,扫描一遍,吧出现的数的记录下来。再扫描一下找出丢失的数字。时间复杂度O(n)如果不允许开空间:可以排序,然后遍历一遍找出未出现的数。采用基数排序O(d*n),当n<=100000是复杂度 O(7*n)解决O(n),不过破坏了原来的数组不破坏原来数组的方法:如果小于n个数补0 补成n个数。扫描数组,if(a[i]>0)a[a[i]]+=2*n;再扫描一遍 if(a[i]<=n) cout<<i<< " ";else a[i] -= 2*n;//恢复数组O(2*n),不破坏原数组 阅读全文
posted @ 2012-10-29 16:39 知识天地 阅读(415) 评论(0) 推荐(0) 编辑
二维动态规划(2)
摘要:给一个n*n的矩阵,矩阵每个元素的值为非负整数。现在要从左上角走到右下角,只能向右或向下走。找出两条路径, 使他们所经过的点的和最小。使用二维动态规划:状态转移方程:dp[x][y][i][j]表示第一条路径走到x,y点,第二条路径走到i,j点的最大值。O(n^4)dp[x][y][i][j]=max(dp[x-1][y][i-1][j], dp[x][y-1][i-1][j],dp[x-1][y][i][j-1], dp[x][y-1][i][j-1])+A[x][y] +a[i][j];(x==i,y==j需要特殊处理)优化:dp[x][y][z]表示第一条路径水平走x不,第二条路径水平走 阅读全文
posted @ 2012-10-14 22:10 知识天地 阅读(314) 评论(0) 推荐(0) 编辑

上一页 1 2 3 下一页