随笔分类 - 算法
摘要:后缀数组很久很久以前就出现了,具体的概念读者自行搜索,小菜仅略知一二,不便讨论。 本文通过寻找两个字符串的最长公共子字符串,演示了后缀数组的经典应用。 首先需要说明,小菜实现的这个后缀数组算法,并非标准,只是借鉴了其中的思想。 小菜实现的算法,有两个版本,第一个是空间换时间,第二个是时间换...
阅读全文
摘要:本文所指TwoQueues缓存模型,是说数据在内存中的缓存模型。 无论何种语言,都可能需要把一部分数据放在内存中,避免重复运算、读取。最常见的场景就是JQuery选择器,有些Dom元素的选取是非常耗时的,我们希望能把这些数据缓存起来,不必每次调用都去重新遍历Dom树。 存就存吧,但总得有个量...
阅读全文
摘要:面试题目一、请定义这样一个函数function repeat (func, times, wait) {}这个函数能返回一个新函数,比如这样用var repeatedFun = repeat(alert, 10, 5000)调用这个 repeatedFun ("hellworld")会alert十次...
阅读全文
摘要:面试题目根据下面的配置文件module=[{'name':'jquery','src':'/js/lib/jquery-1.8.3.js'},{'name':'swfobject','src':'/js/utils/swfobject.js'},{'name':'fancybox','src':'/...
阅读全文
摘要:如题~ 此算法仅供参考,小菜基本不懂高深的算法,只能用最朴实的思想去表达。 1 //找出字符串中第一个不重复的字符 2 // firstUniqueChar("vdctdvc"); --> t 3 function firstUniqueChar(str){ 4 var str = str...
阅读全文
摘要:原始题目:给定一个无序的整数序列, 找最长的连续数字序列。例如:给定[100, 4, 200, 1, 3, 2],最长的连续数字序列是[1, 2, 3, 4]。小菜给出的解法: 1 function maxSequence(array,step){ 2 var _array = array.sl...
阅读全文
摘要:现实生活中的问题,可能会抽象为这样一种数据模型: 从一个数组中挑选出几个数,让这几个数相加的和为指定的值。 大多数读者应该有过网购的经历,网购一般会有个凑单功能,假如读者买了70元的商品,但是必须满100元才能包邮,这时系统会自动推荐一些商品,加起来差不多就100块钱了。 系统如何确定推荐...
阅读全文
摘要:废话少说,直接入题。 在面向对象语言中,经常会比较两个对象是否相等,而比较的大多是实体类实例,也就是封装数据的那些类实例,或者是Map、List互相嵌套成的复杂数据结构。 比较对象是否相等,常见的思路是重写equals方法,但鉴于对象的种类多变,嵌套层次复杂,仅仅靠重写equals是很难实现...
阅读全文
摘要:今天看到一个很有意思的面试活动(活动链接),不需要简历,只有一道编程题目,在线提交你的代码即可。 本菜鸟对面试不感兴趣,但题目让我很兴奋,特来挑战一下~ 或许当你看到这篇博文的时候活动已经失效了,所以小菜就把题目记下来:大道至简,知易行难!我们的题目简约而不简单,千万不要轻敌,即使简单的代码,做到...
阅读全文
摘要:字符串在编程过程中必不可少,程序中不同模块的交互也少不了传递字符串。 有时候,我们可能有这样的需求:字符串中某个子字符串是个特殊的标记,在传输过程中会对程序造成干扰,必须屏蔽它。最常见的例子:发起GET请求时,URL上的参数中如果有&符号,可能会导致参数列表被截断,最终导致传参失败。 遇到这种情况,我们首先能想到的是把参数加密,然后传输,最终处理的时候再解密,这样就巧妙的转换了特殊标记的表现形式,貌似可以解决问题。 但是,你不能保证加密算法本身不会产生特殊标记,也就是说,万一加密后的字符串中又出现了特殊标记怎么办? 因此,你不得不仔细筛选加密算法,确保不会冲突。但这种做法并不通用,如果
阅读全文
摘要:直接上代码: 1 /** 2 * Name: 求数组中元素重复次数对多的数和重复次数 3 * Description: 4 * 数组中的元素可能会重复,这个方法可以找出重复次数最多的数,同时可以返回重复了多少次。 5 * 但需要知道这个数组中最大的元素是多少,如果无法确定,就悲剧啦~ 6 * 7 * @param array目标数组; 8 * max数组中数据的最大值; 9 * @return 返回一个包含重复次数最多的数(value)和重复次数(maxCount)的map集合; 10 * 内部出现异常...
阅读全文
摘要:参考博文: SQL LIKE语句多条件贪婪匹配算法 SQL LIKE语句多条件贪婪加权匹配算法(改进版) SQL LIKE语句多条件贪婪加权匹配(新增必要词指定)前言: 算法的基本特性在前几篇博客中已经做了详细的说明,经过不断的改进优化,到归仓的时候了,也就是说,该算法告一段落,不再更新。 作为最终的解决方案,简要的总结一下算法特性,以方便读者参阅。 l 目的:主要用于多条件模糊匹配。 l 贪婪特性:返回满足条件尽可能多的记录。 l 权重特性:为关键词分配权重,代表关键词的重要性,在不破坏贪婪特性的前提下,返回权重高的记录。 l 必要关键词指定特性:在不破坏贪婪特性和权重特性的前提下,返回的.
阅读全文
摘要:前两篇博客:SQL LIKE语句多条件贪婪匹配算法SQL LIKE语句多条件贪婪加权匹配算法(改进版) 为了更好的扩充本算法的适用范围,特加入必要关键词指定功能。 在实际应用中,很可能希望匹配的时候必须出现某个词,否则就是没有意义的匹配。 说到这,读者可能觉得这些需求小题大做,在程序中用正则表达式很容易实现,再次重申,现在的矛盾是我们不能把记录返回到程序中处理,因为涉及到大数据量,必须考虑服务器承受能力、并发访问数量、网络传输能力、程序处理能力等诸多因素。在服务器端尽量缩小数据范围,减少数据传输量,无疑是最佳选择。 这个版本加入的新特性即必要关键词指定,同样拿“如何在CSDN网站注册用户”这句
阅读全文
摘要:上一篇博客:SQL LIKE语句多条件贪婪匹配算法。 直接入题,其他的就不罗嗦了。 上篇博客仅仅是实现了多个关键字“尽可能多的匹配”。 但是在实际应用中,尽可能多的匹配不一定合理。 就拿“如何在CSDN网站注册用户”这句话来说,拆成“CSDN”、“注册”、“用户”这三个词。假如数据库中某条记录匹配了“CSDN”、“注册”这两个词,另一条记录匹配了“注册”、“用户”这两个词。两条记录中匹配词的个数都是两个,如果仅仅用上一篇博客的算法,这两个记录是对等的,而显然,他们不是对等的!“CSDN”这个词在这句话中至关重要,他是先决条件。因此,匹配“CSDN”、“注册”这两个词的记录要比匹配“注册”、“.
阅读全文
摘要:昨天在论坛看到有人提出怎么识别两个字符串最大的相同的部分,很遗憾没人回帖,在此发布一个原创的算法,可以快速的找出两个字符串中所有的最长的相同的部分。 public class BestLike { private string strString1=""; private string strString2=""; private string strFormat=""; private string strLargeLen="1"; private int intStart=0; ...
阅读全文
摘要:现在看看大家都用异或,感觉简单了点,没有创新。来一个新型的加密算法。 先说说思路:加密的时候是先用一个密码产生随机数列,随机把ASC码表打乱;然后把ASC码表放在一个数组里。把真实的字符换成ASC码,然后去数组里匹配,匹配成功后把这个数组的下表值转换成字符,接着再用一个密码产生随机数列,用来随机确定下表的位置(说明:加密后每组5个字符下表伪装算一个,其他的用随机数产生随机字符,用的是第二个密码),这样产生的乱码是原来字符的5倍,每五个一组,每组中有一个是记录数组下表的字符(位置不定)。至于解密,先要有密码把ASC码表重新排序,然后五个一组开始解,如果加密完字符长度为n,要产生n个随机数,其中每
阅读全文