数据结构与算法之美(笔记6)二分查找

二分思想 二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都用过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。 假设我们要寻找19。 这里给出二分查找的代码实现: int binary_search(int* arr,int capacity,int elem){ int low = 0; int high = capacity -1; while(low <= high){
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

数据结构与算法之美(笔记8)散列表

散列思想 散列表也叫哈希表,或者叫“hash”表。散列表用的是数组支持按照下标随机访问数据的热性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。 举个例子,假如我们有89个选手参加学校的运动会。为了方便记录成绩,每个选手胸前会贴上自己的参赛号码。这89个选手的编号一次是1到89,。现在我们希望变成实现着这样一个功能,通过编号快速找到对应的选手信息,你会怎么做呢? 我们可以把这89名选手的信息放在数组里。编号为1的选手,我们放到数组中下标为1的位置,编号为
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

数据结构与算法之美(笔记9)哈希算法

什么是哈希算法? 我们前面讲到散列表,散列函数,这里又是哈希算法,实际上,散列函数就是哈希算法的一个特例。只不过在散列表中,我们通常希望散列函数简单,才不会影响查找等的性能。哈希算法的定义和原理很简单,就是把任意二进制串值映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始的数据映射之后得到的二进制值串就是哈希值。 哈希算法满足的几点要求: 从哈希值不能反向推导出原始数据。 对输入的数据非常敏感,哪怕原始数据只修改了一个bit,最后得到的哈希值也大不相同。 散列冲突的概率要小,对
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

数据结构与算法之美(笔记10)二叉树

树 比如下面这幅图,A节点是B节点的父节点,B节点是A节点的子节点。B、C、D这三个节点的父节点是同一个节点,所以它们之间互称兄弟节点。我们把没有父节点的节点叫做根节点。我们把子节点的节点叫做叶子节点或者叶节点。 另外,关于“树”,还有三个比较相似的概念:高度,深度,层。 二叉树 二叉树,每个节点最多有两个“叉”,也就是两个子节点,分别是左子节点和右子节点。 其中,编号为2的二叉树,除了叶子节点之外,每个节点都有左右两个子节点,这种二叉树叫做满二叉树。 编号3的二叉树中,叶子节点都在最底下两层
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

数据结构与算法之美(笔记12)递归

如何理解递归? 举个例子,周末你带着女朋友取电影院看电影,女朋友问你,咋们闲杂坐在第几排?电影院里面太黑了,看不清,没法数,现在那你怎么办? 你可以问前面一排的人他是第几排,你想只要在他的数字上加上,就知道自己在哪一排了。但是,前面的人也看不清,所以它也问前面的人,就这样一排排往前问,直到问到第一排的人,说我在第一排,然后再这样一排一排再把数字传过来。 这就是一个非常标准的递归求解问题的分解过程,去的过程是“递”,回来的过程是“归”。基本上,所有的递归问题都可以用递推公式来表示: f(n)=
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

数据结构与算法之美(笔记13)堆

如何理解“堆”? 堆的要求: 堆是一个完全二叉树 堆中每一个节点的值都必须大于等于(或者小于等于)其子树中每个节点的值。 对于每个节点的值都大于等于子树中每个节点值的堆,我们叫做“大顶堆”。对于每个节点的值都小于等于子树中每个节点的值的堆,我们叫做“小顶堆”。 如何实现一个堆? 我们知道,完全二叉树比较适合用数组来存储。用数组来存储完全二叉树是非常节省存储空间的。因为我们不需要左右字节的指针,单纯地通过数组的下标,就可以找到一个也节点的左右子节点和父节点。 从图中,我们知道,数组中下标为i的节
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

数据结构与算法之美(笔记14)堆的应用

一、优先级队列 我们前面讲过,队列最大的特性就是先进先出。不过,在优先级队列中,数据的出队顺序不是先进先出,而是按照优先级来,优先级最高的,最先出队。 一个堆就可以看做一个优先级队列。很多时候,它们只是概念上的区分而已。往优先级队列中插入一个元素,就相当与往堆中插入一个元素,从优先级队列中取出优先级最高的元素,就相当于取出堆顶元素。 1.合并有序小文件 假设我们有100个文件,每个文件的大小是100M,每个文件中存储的都是有序的字符串。我们希望将这些100个小文件合并成以一个有序的大文件。这里
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

数据结构与算法之美(笔记15)图的表示

如何理解图? 我们直到,树中的元素我们称为节点,图中的元素我们就叫作顶点(vertex)。从画的图中知道,图中的一个顶点可以与任意其他顶点建立连接关系,我们把这种关系叫作边(edge)。 我们日常生活中的社交网络,就是一个很典型的图的应用。比如微信,我们把每一个用户看成一个顶点。如果两个用户之间相互添加好友,那就在两者之间建立一条边。其中,每个用户有多少个好友,对应到图中,就叫作顶点的度 (degree),就是跟顶点相互连接的边的个数。 实际上,微博的社交关系跟微信不一样。微博允许单向关注,也
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

数据结构与算法之美(笔记16)深度和广度优先搜索

什么是“搜索”算法? 图上的搜索算法,最直接的理解就是,在图中找出从一个顶点出发,到另一个顶点的路径。具体的方法有很多,比如深度优先,广度优先搜索,还有A*,IDA*等启发式搜索算法。 广度优先搜索(bfs) 直观地讲,它其实就是一种“地毯式”层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索。 原理虽然看起来简单,但是实现起来却比较难。 先给出代码,再解释: void bfs(int s,int t){ if(s == t) return;
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

数据结构与算法之美(笔记17)字符串匹配:BF、RK算法

BF算法 先讲讲主串和模式串。 比方说,我们在字符串A中查找字符串B,那字符串A就是主串,字符串B就是模式串。我们把主串的长度记为n,模式串的长度记为m。因为我们是在主串中查找模式串,所以有n>m。 BF算法可以用一句话来概括:我们在主串中,检查其实位置分别为0、1、2...n-m 且长度为n-m+1个子串,看有没有跟模式串匹配的。 从上面的例子,我们可以看到,在极端的情况下,比如主串是"aaaa......aaaaaaa",模式串是"aaaaab" 。我们每一次都要对比m个字符,要比对n-m
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

数据结构与算法之美(笔记18)字符串匹配:BM算法

BM算法的核心思想 我们把模式串和主串的匹配过程,看作模式串在主串中不停地往后滑动。当遇到不匹配的字符时,BF算法和RK算法的做法是,模式串往后滑动一位,然后从模式串的第一个字符开始重新匹配。 在这个例子中,主串中的c在模式串中是不存在的,所以,模式串向后滑动的时候,只要c与模式串有重合,肯定无法匹配。所以,我们可以一次性把模式串往后移动几位,把模式串移动到c的后面。 今天要讲的BM算法,本质上就是在寻找这种规律。在模式串与主串匹配的过程,当模式串和主串某个字符不匹配的时候,能够跳过一些肯定不
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

编写一个方法,去掉一个数组中的重复元素

var arr6=[1,2,3,4,5,2,3,4]; console.log(arr6); console.log(fn(arr6)); function fn(array){ var newArr=[]; for(var i=0;i<array.length;i++){ var bool=true; for(var j=0;j<newArr.length;j++){ if(array[i]===newArr[j]){ bool= false; } } if(bool){ newArr[ne
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

H5 设计简单表单

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> form{ width: 100%; /*最大宽度最小宽度*/ max-width: 640px; min-width: 320px; margin: 0 auto; font-family: "微软雅黑"; font-size: 20px; } input{ display: block; height: 30px; width:100%
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

简单表单(H5元素)output keygen )

代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> form{ width: 1000px; max-width: 640px; min-width: 320px; margin: 0 auto; font-family: "微软雅黑"; font-size: 20px; } input,meter,progress{ display: block; width: 100%; hei
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

h5表单(属性)

代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> form{ width: 1000px; max-width: 640px; min-width: 320px; margin:0 auto; font-size:20px } input{ display: block; height: 30px; font-size: 20px; width: 100%; margin: 10
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

H5中oninout、 oninvalid事件(自定义正则验证表单)

代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> form{ width: 1000px; max-width: 640px; min-width: 320px; margin:0 auto; font-size:20px } input{ display: block; height: 30px; font-size: 20px; width: 100%; margin: 10
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

H5浏览器兼容性问题解决方法

Ie8以下的版本不适用H5,解决办法-引入html5shiv.js文件 下载地址:/UserFiles/file/20150118/20150118153337_288.zip
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

解决音频视频兼容性问题

audio支三种音频格式:Ogg Vorbis,MP3,Wav <video src="js/1.mp3" controls="controls" autoplay="autoplay"></video> <!-- 多浏览器支持的方案--> <video controls="controls" autoplay="autoplay" width="1000px"> <source src="js/1.mp3"></source> <source src="js/1.ogg></source>
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

H5 导航栏Tab切换

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> .tabs{ width: 400px; text-align: center; margin: 30px auto; border: 1px solid #C0DCC0; background-color: #FFF; box-sizing: border-box;
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0

WebStrom 激活码

在打开的 License Activation 窗口中选择 License server。点击 Activate。 http://idea.iteblog.com/key.php
分类: 其他 发布时间: 03-30 23:01 阅读次数: 0