
algorithm
文章平均质量分 74
iteye_4865
这个作者很懒,什么都没留下…
展开
-
连续子数组和极值问题
Programming pearls 8 chapter question . /*** User: yiminghe * Date: 2009-2-16 * Time: 15:40:11 */public class LongestSubArray { /** * 一维数组最大的连续子数组和 [ -1 ,2,3,-5] ...原创 2009-02-16 16:05:06 · 118 阅读 · 0 评论 -
子数组换位问题
/** * Author: yiminghe * Date: 2008-10-29 * Time: 22:55:06 */import java.util.Arrays;/** * 将数组的前K个数和后n-k个数交换位置 * 如 1,2,3,4,5,6 * k=4 * 得到 * 5,6 ,1,2,3,4 */public class Sw...原创 2008-10-29 23:39:00 · 199 阅读 · 0 评论 -
数组极值问题
1。 最坏情况下 3n/2-2 次比较可以得到数组的最大值和最小值 max[n/2] min[n/2]a[1....n] 可以 a[1] a[2] 比较得到 max[1] min[1] ,同理 ,可以得到 max[] min[] 的值比较次数 n/2max[] 中得到最大值 n/2-1min[] 中得到最小值 ...原创 2008-11-03 22:14:36 · 540 阅读 · 0 评论 -
数值近邻问题
一个 无序 数组中各个数互不相同 ,a 是数组中的一个数 ,求与 a 最接近的 k 的数 1。最笨的算法 ,排序 ,然后a两边找 2。转变思路 ,其实求所有与 a 的 绝对差的前 k 个数 则可得到 先将数组 for( x: x[]) x=|x-a|利用 select 算法 (算法导论 O(n) )可以找第 ...原创 2008-11-04 20:18:59 · 135 阅读 · 0 评论 -
孤独数问题
一个数组 2n+1 个整数 ,两两相同 ,只有一个是和其他都不同的 ,问这个数是什么 (要求 o(n)时间复杂度,o(1)空间复杂度) 1。最傻的方法还是排序。。。。 连续查找2。其实利用异或操作 : A xor B = 0 ; A xor B xor A = A xor A xor B = B则这个数就是 result=0...原创 2008-11-04 21:13:01 · 486 阅读 · 0 评论 -
多维数组迭代器应用
在代码之美中提到了这个问题,经常遇到嵌套数组的情况即多维数组情况,有时并关心嵌套结构,而只关心里面的数据处理,那么一般的自己写对应的for循环来拆除对应的嵌套数组,如果同书中所说编写通用的 Iterator 迭代器,则可不必对不同的嵌套循环编写不同的for循环,只需同的操作即可,还可方便的处理维slice情况,对每一维都可控制到底要处理哪些数据: 例子:处理二维数组:...原创 2010-01-10 18:04:00 · 233 阅读 · 0 评论 -
三点共线判断
经典的计算几何方面问题,判断二维坐标系中是否三个点在一条直线上:A (ax,ay) ,B(bx,by),C(cx,cy) 1. 斜率解法判断 (ay-by)/(ax-bx) == (cy-by)/(cx-bx) 缺点:当 ax == bx 或 cx==bx 时需要特殊判断,注意使用 gcd 化简分子分母比较,不要使用浮点结果比较,...原创 2010-01-12 19:43:56 · 1630 阅读 · 1 评论 -
开关状态信息的保存
系统中常常会存在大量的状态信息,特别是0-1值信息,某个条件是否达成,某个功能是否存在,某个操作是否成功等等,通常的做法是将各种状态条件编号,利用boolean数组来表示。 //0表示a功能,1表示b功能//a功能生效status[0]=true;//b功能生效status[1]=false; 由于大多数语言实际上是将boolean类型等同于整数类型,javas...原创 2010-08-30 15:23:27 · 304 阅读 · 0 评论 -
NFA到DFA的转换演示
复习一下编译,在龙书中提到的NFA(不确定有穷自动机)到DFA(确定有穷自动机)的转换,master regular expression中提到的不依赖于正则表示式的识别问题,不用精心构造正则表达式,只需将正则表达式转化为NFA,进而转化为DFA,则任何长度为n的字符串都可以在O(n)时间内判断出来是否符合该正则表达式。关于正则表示式如何转化为NFA暂略,这里演示一下使用子集构造算法将NFA转...原创 2010-03-07 20:57:14 · 563 阅读 · 0 评论 -
LL文法算法-1
为了实现自顶向下的语法分析器,需要将文法的1.左递归消除(完成)2.提取公因子(完成)3.计算first,follow集合(完成)4.得到LL(1)预测分析表 (100322完成)如下面的文法: E = E + T | TF = ( E ) | idT = T * F | ...2010-03-12 22:30:41 · 193 阅读 · 0 评论 -
编程之美:烙饼排序问题
书中的题目描述: 星期五的晚上,一帮同事在希格玛大厦附近的“硬盘酒吧”多喝了几杯。程序员多喝了几杯之后谈什么呢?自然是算法问题。有个同事说:“我以前在餐馆打工,顾客经常点非常多的烙饼。店里的饼大小不一,我习惯在到达顾客饭桌前,把一摞饼按照大小次序摆好——小的在上面,大的在下面。由于我一只手托着盘子,只好用另一只手,一次抓住最上面的几块饼,把它们上下颠倒个个儿,反复几次之后,这摞...2009-07-21 15:09:40 · 201 阅读 · 0 评论 -
编程之美:javascript的数独实现
书中没有给出具体实现,但是算法1也不难,自己实现玩玩用来测智商吧。 规则: 一个由3个3*3的子矩阵组成的9*9矩阵,其中每个3*3矩阵都由1-9这9个数字组成,且数独矩阵中每行每列都没有重复数字。 3*3子矩阵数字各不相同 效果图:演示@google code 代码:(可copy直接运...2009-07-22 15:46:24 · 152 阅读 · 0 评论 -
Array.prototype.sort 稳定性问题
引例 首先看一段代码: <html><head><title>sort稳定性</title></head><body><h1>Non-stable Sort</h1><ol><sc2009-09-16 13:49:20 · 314 阅读 · 0 评论 -
LCA In Javascript 演示
理论:LCA 即 Least Common Ancestor 问题 ,用于在树结构中查找任意两个结点的最小公共祖先,很容易的算法是O(logn),但是对于查询很大的情况,可能并不完美,完美的当然就是O(1)。那么就采用空间换时间的方法,及可转化为 RMQ (Range Minimum/Maximum Query) 问题 。 效果示例 ( 下载 ):...2009-10-05 17:24:33 · 158 阅读 · 0 评论 -
循环引用下的深度克隆
深度复制和浅度复制是当初初学 c 遇到的第一批问题,似乎使不少人困惑,而类 c 的 javascript 也同样存在这个问题. 第一版: javascript 中引用类型(Object.prototype.toString.call(object))有 : Array 以及 Object , Date , RegExp ,Number, Function,Bool...原创 2011-08-04 20:39:54 · 682 阅读 · 0 评论 -
circular dependency
循环依赖是和语言无关的一个设计问题,在各个语言环境下都可能存在循环依赖,甚至引起 stackoverflow,这种大多数是由于不好的设计而导致的,一般来说都可以通过提取公共模块而解决,特定的场景下对应用程序做一定的调整也可以在维持循环依赖的前提下避免栈溢出。 语言机制: c++ c++ 中的循环类定义引用会导致编译出错,一般的解决方案可以通过提前声明来解决: ...原创 2011-12-11 18:23:52 · 1398 阅读 · 0 评论 -
转载:瀑布流布局浅析
简介 如果你经常网上冲浪,这样参差不齐的多栏布局,是不是很眼熟啊? 类似的布局,似乎一夜之间出现在国内外大大小小的网站上,比如 Pinterest (貌似是最早使用这种布局的网站了),Mark之,蘑菇街,点点网,以及淘宝最新上线的“我要买” 等等,倒是很流行哈~ 在淘宝即将上线的众多产品中,你还会大量看到这样的形式呢。 这种布局适合于小数据块,每个数据块内容相近且...原创 2011-09-29 19:02:32 · 434 阅读 · 0 评论 -
write html parser
首先需要声明 html 不能用正则表达式来直接匹配进行内容抽取等处理,这样做的结果很严重! Not XHTML Parser 另一点需要注意的是:不是构建 xhtml parser ,如果是 xhtml 的话可采用 parser generator 根据 grammar 直接生成解析器即可,而 html 由于对错误很宽容(比如普遍的标签不闭合问题),具备超强的错误纠正机制,...原创 2011-12-01 02:48:54 · 173 阅读 · 0 评论 -
LCS 问题
/** * Author: yiminghe * Date: 2008-10-24 * Time: 15:08:32 * Any problem ,contact yiminghe@fudan.edu.cn. */import java.io.*;import java.util.*;/** * 利用 后缀树算法 * * LCS 问题及其扩展,找...原创 2008-10-24 18:03:15 · 140 阅读 · 0 评论 -
编程之美:找符合条件的整数
任意给定一个正整数 N,求一个最小的正整数 M ( M>1 ),使得 N*M 的十进制表示形式里只含有 1 和 0. 假设对所有的 1,0 组合数字进行搜索,则形成一个树 1 10 11 100 101 110 111... n 层的书,第 k 层树个数 2...2009-07-08 15:15:14 · 142 阅读 · 0 评论 -
链表带环问题
import java.util.Arrays;/** * Author: yiminghe * Date: 2008-10-17 * Time: 14:39:23 *//*删除数组指定元素*/public class DelChars { public static void main(String[] args) { in...原创 2008-10-17 17:08:31 · 99 阅读 · 0 评论 -
最优多项式的求值
y=anx^n+an-1x^(n-1)+...+a0 1. 从程序角度yn=anx^n+an-1x^(n-1)+...+a0 yn-1=an-1x^(n-1)+...+a0 yz=azx^(z)+...+a0 则 yn=yn-1+anx^n 且 x^n =x* x^(n-1)...2009-02-17 23:59:53 · 246 阅读 · 0 评论 -
KMP 最优字符串查找算法
可惜我就是讲不明白 , 直接上书 ,见图片附件 ,手机 500M 像素 蛮清楚的 import java.util.Arrays;/** * User: yiminghe * Date: 2009-2-19 * Time: 16:37:57 */public class Kmp { /** * index[i] 越小 ,...原创 2009-02-20 02:29:22 · 179 阅读 · 0 评论 -
序列随机采样问题
Programming pearls chapter 12 sampling problem 从 1到n个数中随机选出m个不同的数 import java.util.Random;import java.util.Set;import java.util.TreeSet;import java.util.Iterator;/** * User: yiminghe ...2009-02-21 01:33:00 · 215 阅读 · 0 评论 -
集合的库实现
Set 定义为 : 不含重复元素的集合 ,它有多种实现方式 1 .线性结构 : 1.1 数组,可以设置有序数组 , 插入元素时 运行 插入排序算法 1.2 链表 , 内存分散 ,元素之间用指针相连 ,同样 插入元素时 运行 插入排序算法 2.二分搜索树 建立一个二叉树 , 可以二分插入 3.桶 (箱)(hash)算法 ...原创 2009-02-23 20:16:45 · 86 阅读 · 0 评论 -
LCS与后缀数组
前一段时间的 LCS问题 LCS 问题及其扩展,找到多个字符串的所有公共子串用后缀树的方法 ,看了编程珠玑后觉得后缀树组更简洁高效 ,故重新实现下找出单个字符串最长的重复子串以及最长的出现m次的子串。 import java.util.ArrayList;import java.util.Collections;/**...原创 2009-03-02 23:56:33 · 333 阅读 · 0 评论 -
排列与组合问题
演示@google code 1-n 全排列问题 1.非递归解法 思路 :利用数字下标从小增到最大,同一字符编同一数字 12345->12354->12435->12453->..... find a[i]>a[i+1] , find j ,j>i && j<n &am...原创 2008-09-13 04:30:00 · 106 阅读 · 0 评论 -
螺旋问题研究
记得大一上 c 语言的时候就碰到过这个问题 ,当时很菜 ,完全不会 ,今天没事上网看到这个似乎也成面试题了,就用各种方法个做了一遍 ,现在思路小case ,就是细节还搞了半天题目 : 生成[43, 44, 45, 46, 47, 48, 49, 50][42, 21, 22, 23, 24, 25, 26, 51][41, 20, 7, 8, 9, 10,...原创 2008-09-15 16:53:34 · 175 阅读 · 0 评论 -
一道数字统计的题
不知道是不是 没事闲的,想出来一道题:0 到 n 的数字中,有几个数字,包含某个个位数,如0到11有 2个数包含 1 ------- 1, 11 1个数包含 4 ------- 4 2 个数包含 0 ------- 0,10结果停不下来了,花了一晚上搞了个程序,我脑袋笨还...原创 2008-09-17 01:01:18 · 186 阅读 · 0 评论 -
最大间隔问题
给定 n 个实数 ,找出这n个数在实轴上相邻两个数 的 最大差值如输入 2.3, 3.1, 7.5, 1.5, 6.3 (注意 无序哦)最大差值:6.3-3.1=3.2赫赫 ,不要先想排序 ! 提示:利用 鸽笼原理 :5个数,设 6个相同大小的桶在实轴上覆盖5个数 , 则必有一桶里没有数字 ,则知道最大差值了吧 ,嘿嘿,线性算法!...原创 2008-10-08 01:06:48 · 167 阅读 · 0 评论 -
后缀表达式的javascript转化演示
复习经典算法,原算法:数据结构(用面向对象方法与c++描述) 112页 。效果: 演示@google code代码: <script>var postfix=function(){ //栈内优先数 var isp={ '(':1, '^':7, '*':5, '/':5,...2009-10-19 23:46:07 · 105 阅读 · 0 评论 -
背包问题javascript演示
背景:经典递归示例:背包问题 背包问题的一个例子:应该选择哪些盒子,才能使价格尽可能地大,而保持重量小于或等于15 kg? 效果: 演示地址@google code 代码: /* a:{ weight : weight, //当前物品重量 value : val...2009-10-26 16:28:40 · 478 阅读 · 0 评论 -
找零问题
问题描述: 有n美元需找零. 美元中有x美分,y美分,z美分,a美分,s美分总共有多少种方式?分成两步: 1.计算使用x美分找零的方法数. 2.上面数目加上除了使用x美分找零的方法数以外的数目. 演示@google code 代码: 想模仿 scheme 很棘手 /...2009-10-31 16:07:17 · 415 阅读 · 0 评论 -
有限状态自动机的javascript实现
启发自 more programming pearls 2有限状态自动机(FSM)是计算的一种优雅的数学模型和有用的实践工具,它在程序设计语言的语法分析,通信协议以及简单的硬件设备等许多应用领域都有广泛的用途。例子:抑制比特流中的所有新出现的1:input:011010111output:001000011...2009-06-12 17:02:08 · 808 阅读 · 0 评论 -
绝妙取样之javascript实现
More Programming pearls 做习题:用你最喜欢的编程语言实现Floyd算法。 1 - n 中随机取m个数组成集合1 - n 中随机取m个数组成序列 演示@google code javascript实现以及证明,更简洁优雅 <script type="text/javascript"&...2009-06-16 03:38:18 · 130 阅读 · 0 评论 -
Arrays.binarySearch 的javascript实现
曾经研究过二分搜索的各种变种: 二分法 的 扩展 今天无意中看了下 JDK 中二分搜索的实现,确实很精巧,特别是返回插入点的设计很不错!用javascript实现下哦: <script type="text/javascript">/* please sort first 如果找到返回查找值所在索引 否则返回-(x+1...2009-06-20 01:13:21 · 186 阅读 · 0 评论 -
二分法扩展实例
二分法很简单吧 ,但要想 一次写对 也不容易吧 ,更何况他的一些扩展应用呢 ,我这里扩展了四种,基础知识 还是牢靠的好/** * Author: yiminghe * Date: 2008-10-13 * Time: 23:50:48 * Any problem ,contact yiminghe@fudan.edu.cn. */public class Bina...原创 2008-10-14 00:37:36 · 102 阅读 · 0 评论 -
主要素问题分析
算法方面 有名的主要素问题:找到一个数组中 出现 次数 超过一半数组大小的数 三种解法: import java.util.Arrays;import java.util.ArrayList;/** * Author: yiminghe * Date: 2008-10-15 * Time: 19:33:34 * Any problem ,...原创 2008-10-15 21:10:06 · 144 阅读 · 0 评论 -
构建前端 DSL
目前在传统的软件开发领域 [DSL]() 已经比较普遍,特别是 [Martin Fowler]() 的突出贡献。而在前端领域尚较少涉及,而如果在前端开发中合理使用 DSL 同样也可以有效得**减少代码数量,提高可读性**,常见的一个应用场景即前端模板的构建。本质上说模板也是一个微型语言,因此可以从DSL的角度着手,使用工具快速构建一个适合于特定前端框架的模板引擎。本文将以 [KISS...原创 2012-10-11 22:10:32 · 1060 阅读 · 0 评论