查找数据有2种方式,顺序查找和二分查找。顺序查找适用于元素随机排列的列表。二分查找适用于元素已排序的列表。二分查找效率更高,但是必须是已经排好序的列表元素集合。 一:顺序查找 顺序查找是从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,或者直到列表的结尾都没有找到想要找的元素。 代码如下:function seqSearch(data,arr) {for(var i = 0; i < arr.length; ++i) {if(arr[i] == data) {return tr...
具体题目是这样的:从1--9中选取N个数字,组成不重复的N位数,从小到大进行编号,当输入其中任何一个数M时,能找出该数字对应 的编号。如 N=3,M=213. 输出:[123(1) , 132(2) , 213(3) , 231(4) , 312(5) , 321(6)]--->X=2首先看到题目想到的是生成一个从少到大的全排列的数组,然后再遍历数组得到对应的序号(数组下标加1),又或者想到一个个从小到大的生成push进数组,然后判断该数是不是当前题目给的数,如果是的话要求的序...
本文实例讲述了JS实现的数组全排列输出算法。分享给大家供大家参考。具体分析如下: 这段js代码对数组进行全排列输出,改进了一些老的代码 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。 function permute(input) {var permArr = [],usedChars = [];function main(input){var i, ch;for (i = 0; i < input.length; i++) {ch = input....
在上一篇博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈。栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样操作很快,而且容易实现。 一:对栈的操作。 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端陈为栈顶。比如餐馆里面洗盘子,只能先洗最上面的盘子,盘子洗完后,也只能螺到这一摞盘...
前言:在日常生活中,人们经常要使用列表,比如我们有时候要去购物时,为了购物时东西要买全,我们可以在去之前,列下要买的东西,这就要用的列表了,或者我们小时候上学那段时间,每次考完试后,学校都会列出这次考试成绩前十名的同学的排名及成绩单,等等这些都是列表的列子。我们计算机内也在使用列表,那么列表适合使用在什么地方呢?不适合使用在什么地方呢? 适合使用在:当列表的元素不是很多的情况下,可以使用列表,因为对...
本文实例讲述了JavaScript实现SHA-1加密算法的方法。分享给大家供大家参考。具体实现方法如下: 调用方法:hex_sha1即可。代码如下:/* * * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined * in FIPS PUB 180-1 * * By lizq * * 2006-11-11 * */ /* * * Configurable variables. * */ var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ var chrsz = 8; /* bits...
图的定义 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 有向图有向边:若从顶点Vi到Vj的边有方向,则称这条边为有向边,也成为弧(Arc),用有序偶<Vi,Vj>来表示,Vi称为弧尾,Vj称为弧头。 无序图无向边:若顶点Vi到Vj之间的边没有方向,则称这条边为无向边(Edge),用无序偶(Vi,Vj)来表示。 简单图 简单图:在图结构中,若不存在顶点...
二叉树的概念 二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。二叉树的特点 每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。二叉树中每一个节点都是一个对象,每一个数据节点都有三个指针,分别是指向父母、左孩子和右孩子的指针。每一个节点都是通过指针相互连接的。相连指针的关系都是父子关系。...
谜题穷举一个数组中各个元素的排列策略减而治之、递归JavaScript解代码如下: /** * Created by cshao on 12/23/14. */ function getPermutation(arr) { if (arr.length == 1) { return [arr]; } var permutation = []; for (var i=0; i<arr.length; i++) { var firstEle = arr[i]; var arrClone = arr.slice(0); arrClone.splice(i, 1); var childPermutation = getPermutation(arrClone); for ...
谜题三阶幻方。试将1~9这9个不同整数填入一个33的表格,使得每行、每列以及每条对角线上的数字之和相同。策略穷举搜索。列出所有的整数填充方案,然后进行过滤。JavaScript解代码如下: /** * Created by cshao on 12/28/14. */ function getPermutation(arr) { if (arr.length == 1) { return [arr]; } var permutation = []; for (var i=0; i<arr.length; i++) { var firstEle = arr[i]; var arrClone = ar...
谜题 N皇后问题。将N个皇后放置在NxN的国际象棋棋盘上,其中没有任何两个皇后处于同一行、同一列或同一对角线上,以使得它们不能互相攻击。 策略 回溯法。 JavaScript解 以8皇后问题为例:代码如下: /** * Created by cshao on 12/28/14. */ function getNQueens(order) { if (order < 4) { console.log(N Queens problem apply for order bigger than 3); return; } var nQueens = []; var backTracking = fals...
这两天看了下某位大神的github,知道他对算法比较感兴趣,看了其中的一个计算数字的步数算法,感觉这个有点意思,所以就自己实现了一个。 算法描述与实现原理 给出一个整型数字,统计出有多少种走法可以到达目标,比如一个数字4,可以有下面几种走法代码如下: [ 1, 3 ] [ 4 ] [ 1, 1, 2 ] [ 2, 2 ] [ 1, 1, 1, 1 ]其实通过上面的组合可以得出下面的结论。 1.先列出所有项是1的组合 2.依次从左到右项为1的组合...
今天发现了一个挺好玩的算法题,下面是它的算法描述,源自twitter的一道面试题。 twitter puddles 算法描述 先看一副图上图里的数字是根据一个数组内容来描述的,最后会根据每个数字的大小来模拟一道墙的高度,最后生成一面墙,问你,当下雨的时候,这面墙可以装多少水,以1为计数单位。 下面是装完水之后的一面墙的样子看完上面上幅图,感觉是不是很好玩,确实,下面来简单的分析下它的算法实现 其实这个原理比较简单,总共有下面几个要点: 1....
时至期末,补习信息安全概论作业。恰巧遇古典密码学算法中的playfair算法和hill算法,用javascript语言实现起来是在有趣,边查百度边编码,顺便好好补习一下javascript基础。 playfair Playfair密码(英文:Playfair cipher 或 Playfair square)是一种替换密码。依据一个5*5的正方形组成的密码表来编写,表中排列有25个字母。对于英语中的26个字母,去掉最常用的Z,构成密码表。 实现思路: 1,编制密码表密钥是一个单词或词组,密...
比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。代码如下: function sort(elements){ for(var i=0;i<elements.length-1;i++){ for(var j=0;j<elements.length-i-1;j++){ if(ele...