随笔分类 - 算法
摘要:一、数组排序 题目链接:http://hero.pongo.cn/Question/Details?ExamID=92&ID=94&bsh_bid=281776595题目详情: 给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100。 例如: 原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1。 原数组是2,3,1,我们需要交换2和1,变成1,3,2,再交换3和2,变为1,2,3,总共需要的交换次数为2,所以输出2。 分析: 通过示例可以看出,可以用数组的第一项跟
阅读全文
摘要:刚才看到新闻频道转截的一篇文章:阮一峰:字符串匹配的KMP算法,图文并茂通俗易懂,就用JS实现了一下,现分享出来。 算法的核心是部分匹配表和回退算法,部分匹配表的实现如下:function kmpGetStrPartMatchValue(str) { var prefix = []; var suffix = []; var partMatch = []; for(var i=0,j=str.length;i<j;i++){ var newStr = str.substring(0,i+1); if(newStr.length == 1...
阅读全文
摘要:刚才一朋友问了我一个问题:arr=['1','1','1','2',,'3','4','5','5','6','6','7','8','9','9','10'];现在有一个这样规律的数组,需求是把里面相同元素组合成一个新的数组,有什么比较简便的方法不也就是说,最终要的结果是这样的:newArr =[ [ "1" , "1&quo
阅读全文
摘要:这是博问中的一个问题:http://q.cnblogs.com/q/39172/ 我的方案如下:function isOverlap(idOne,idTwo){ var objOne=$("#"+idOne), objTwo=$("#"+idTwo), offsetOne = objOne.offset(), offsetTwo = objTwo.offset(), topOne=offsetOne.top, topTwo=offsetTwo.top, leftOne=offsetOne.left,...
阅读全文
摘要:Levenshtein算法Levenshtein算法定义及算法原理见这篇文章:一个快速、高效的Levenshtein算法实现JavaScript实现function levenshteinDistance(s,t){ if(s.length>t.length){ var temp=s; s=t; t=temp; delete temp; } var n=s.length; var m=t.length; if(m==0){ return n; } else if(n==0){ ...
阅读全文
摘要:代码如下:function numInstring(str){ str=str.replace(/ /ig,""); var strArr=str.split(""); var result=[],beforeLength,afterLength,reg; for(var i=0;i<strArr.length;i++){ if(str.indexOf(strArr[i])!=-1){ beforeLength=str.length; reg=new RegExp(strArr[i],"ig"); ...
阅读全文
摘要:需求是这样的:http://q.cnblogs.com/q/29266/ 这里简述一下:一个小小排序问题。。不是很高深的用c#代码实现,不要用linq技术问题:广东 30湖南 20广西 60北京 70上海 30 排序之后: 北京 70广西 60广东 30上海 30湖南 20 这是一个简单的键值按值排序问题,难点在于不用linq(有的项目环境是.NET 2.0),如果用linq很容易解决(在该问题的回复中有,这里就不说了),下面提供两种方法。 方法一,建一个只有key和value两个属性的实体,然后用冒泡排序,代码如下: class Program { ...
阅读全文
摘要:上一篇实例讲解遗传算法——基于遗传算法的自动组卷系统【理论篇】讲了遗传算法的原理及在自己动组卷系统中的应用,本篇将给出上一篇中所述理论的实践。 先上两张运行后的效果图吧:基于遗传算法的自动组卷系统运行效果图(1)基于遗传算法的自动组卷系统运行效果图(2)一、准备工作1、问题实体 问题实体包含编号、类型(类型即题型,分为五种:单选,多选,判断,填空,问答,分别用1、2、3、4、5表示)、分数、难度系数、知识点。一道题至少有一个知识点,为简单易懂,知识点用List<int> 表示(知识点编号集合)。 代码如下:publicclassProblem{ publicProblem()...
阅读全文
摘要:一、遗传算法介绍 1.1 遗传算法概要 遗传算法(Genetic Algorithm,简称GA)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法,由美国的J.Holland教授1975年首先提出。遗传算法是一种模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,通过模拟自然进化过程搜索最优解,它常用来解决多约束条件下的最优问题。 遗传算法是从代表问题可能潜在的解集的一个种群开始的,而一个种群则由经过基因编码的一定数目的个体组成。每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,它决定了个体的形状的外部表现。因此,...
阅读全文
摘要:今天在博问中看到一个比较常见的问题: 求算法(合并重叠时间段)在这里先把问题描述一下:同一天中的一连串不连续时间段,合并其中重叠时间,如:StartTime EndTime06:10:58 08:15:2807:38:56 10:34:4510:55:00 11:34:0013:09:34 17:45:2314:23:12 15:24:1416:14:25 17:52:15...合并后为:StartTime EndTime06:10:58 10:34:4510:55:00 11:34:0013:09:34 17:52:15...时间复杂度尽量避免n^2的情况,即集合内任一元素与其他元素各比较一
阅读全文