码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构和算法

时间:2015-10-10 12:03:54      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:

摘要: ##单一职责原则* 职责被定义为:引起变化的原因;* SRP原则体现为:一个对象(方法)只做一件事情;####常用模式:* 代理模式* 迭代器模式* 单例模式* 装饰者模式####分离职责* 如果随着需求的变化,有两个职责总是同时变化,那就不必分离他们;* 职责的变化轴线仅当它们确定会发生变化时才有...阅读全文
posted @ 2015-07-02 18:05 JinksPeng 阅读(4) | 评论 (0) 编辑
 
摘要: ##鸭子类型:* 只关注对象的行为,而不关注对象本身;##多态:* 简介: 同一操作用于不同对象可以产生不同的结果;* 背后的思想:将不变的事与可能变的事分开,封装;关键是消除类型之间的耦合;* 实现: * 一般语言:常用继承,向上转型来表现对象的多态特性; * JS:由于本身的的‘鸭子类型’特...阅读全文
posted @ 2015-07-02 18:03 JinksPeng 阅读(4) | 评论 (0) 编辑
 
摘要: ##状态模式* 状态模式的关键是把事物的每种状态都封装成单独的类,跟此种状态有关的行为都被封装在这个类内部;当内部状态改变时,会带来不同的行为变化;####电灯开关的例子```var offLightState = function(light) { this.light = light;};of...阅读全文
posted @ 2015-06-17 09:53 JinksPeng 阅读(3) | 评论 (0) 编辑
 
摘要: ##中介者模式* 解除对象与对象之间的耦合关系;增加一个中介者后,所有的对象都可以通过中介者通信而不是互相引用;####中介者模式例子* 游戏```function Player(name, teamColor) { this.state = ‘live‘; this.name = name; ...阅读全文
posted @ 2015-06-17 09:52 JinksPeng 阅读(7) | 评论 (0) 编辑
 
摘要: ##享元模式* 是一种用于性能优化的模式;核心是运用共享技术来有效支持大量细粒度的对象;####内部状态和外部状态* 享元模式要求对象的属性划分为内部状态和外部状态;* 目标是减少共享对象的数量; * 内部状态存储于对象内部; * 内部状态可以被一些对象共享; * 内部状态独立于具体的场景,通...阅读全文
posted @ 2015-06-17 09:51 JinksPeng 阅读(5) | 评论 (0) 编辑
 
摘要: ##组合模式* 将对象组合成树形结构,以表示‘部分-整体’的层次结构;遍历树形结构的操作只需要一次操作;* 利用对象多态性的统一对待组合对象和单个对象,不用关心他们的不同;* 像命令模式中宏命令就是一种组合模式;####请求在树中传递的过程;* 如果子节点是叶节点,叶对象自身会处理这个请求;如果还是...阅读全文
posted @ 2015-06-17 09:50 JinksPeng 阅读(5) | 评论 (0) 编辑
 
摘要: ##观察者模式* 又叫发布订阅模式,定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知;* JS开发中,一般用事件模型替代传统的发布-订阅模式####作用* 可以广泛应用于异步编程中,替代传统回调函数;如订阅`ajax`请求的`error、succ`事件;* 取代对象...阅读全文
posted @ 2015-06-17 09:48 JinksPeng 阅读(5) | 评论 (0) 编辑
 
摘要: ##代理模式* 为一个对象提供一个代用品或占位符。以便控制对他的访问;#####面向对象设计原则-单一职责原则* 就一个类(对象,函数)而言,应该仅有一个引起他变化的原因;(低耦合)####代理和本体借口的一致性* 当不需要代理的时候可以替换回本体####保护代理* 过滤请求;可以用于控制不同权限对...阅读全文
posted @ 2015-06-17 09:47 JinksPeng 阅读(10) | 评论 (0) 编辑
 
摘要: ##单例模式* 保证一个类只有一个实例,并提供一个访问他的全局访问点;####模拟单例实现* 传统方式:```var createDiv = (function(){ var instance; var createDiv = function(html){ if(instance) ...阅读全文
posted @ 2015-06-17 09:46 JinksPeng 阅读(9) | 评论 (0) 编辑
 
摘要: 动态规划:递归是从顶部开始将问题分解,通过解决所有分解出小问题来解决整体问题;动态规划从底部开始解决问题,将所有小问题解决,然后合并掉一个整体解决方案; function dynFib(n) { var val = []; for(var i = 1; i b) ? a : b;}functi...阅读全文
posted @ 2014-10-25 12:04 JinksPeng 阅读(10) | 评论 (0) 编辑
 
摘要: 顺序查找:也称线性查找,暴力查找的一种基本格式:var nums = [];for(var i = 0; i max min = arr[i]; } } return min;}View Code自组织数据:经过多次查找之后,查找最频繁的元素会从原来...阅读全文
posted @ 2014-10-25 10:48 JinksPeng 阅读(17) | 评论 (0) 编辑
 
摘要: 高级排序算法:(处理大数据:百万以上)希尔排序:是插入排序的优化版;首先设置间隔数组,然后按照每个间隔,分别进行排序;如第一个间隔为5,首先a[5]与a[0]进行插入排序;然后a[6]和a[0],a[1]进行插入排序,直到最后一个;然后换下一个间隔值,直到所有间隔值排序完(当间隔值为1时,就是一般的...阅读全文
posted @ 2014-10-20 09:11 JinksPeng 阅读(10) | 评论 (0) 编辑
 
摘要: 基本准备: function CArray(numElems) { this.dataStore = []; this.pos = 0; this.numElems = numElems; this.insert = insert; this.toString = toStr...阅读全文
posted @ 2014-10-19 17:23 JinksPeng 阅读(18) | 评论 (0) 编辑
 
摘要: 图:是由边和定点的集合组成; 按照图的定点对是否有序可以分为:有向图和无向图;路径:所有顶点都由边连接构成;路径长度为第一个定点到最后一个顶点之间的数量;环:指向自身的顶点,长度为0;圈:至少有一条边的路径,且第一个顶点和最后一个顶点相同;强连通:如果两个顶点之间有路径,则这两个顶点就是强连通,反之...阅读全文
posted @ 2014-10-18 19:14 JinksPeng 阅读(29) | 评论 (1) 编辑
 
摘要: 树:以分层的方式存储数据;节点:根节点,子节点,父节点,叶子节点(没有任何子节点的节点);层:根节点开始0层;二叉树:每个节点子节点不超过两个;查找快(比链表),添加,删除快(比数组);BST:二叉树查找:设置根节点为当前节点;如果要插入的节点小于当前节点,则设置其左节点为新的当前节点;大于的话选右...阅读全文
posted @ 2014-10-18 11:24 JinksPeng 阅读(26) | 评论 (2) 编辑
 
摘要: 集合:唯一性,无序性;基本结构: function Set () { this.dataStore = []; this.add = add; this.remove = remove; this.contains =contains; this.show = show; } ...阅读全文
posted @ 2014-10-17 20:45 JinksPeng 阅读(12) | 评论 (0) 编辑
 
摘要: 哈希表(散列表):通过哈希函数将键值映射为一个字典;哈希函数:依赖键值的数据类型来构建一个哈希函数;一个基本的哈希表:(按字符串计算键值)function HashTable() { this.table = new Array(137); this.simpleHash = simpleH...阅读全文
posted @ 2014-10-17 16:13 JinksPeng 阅读(26) | 评论 (0) 编辑
 
摘要: Dictionary类的基础是数组不是对象;字典的主要用途是通过键取值;基本定义:function Dictionary() { this.dataStore = new Array(); this.add = add; this.find = find; this.remove =...阅读全文
posted @ 2014-10-17 14:09 JinksPeng 阅读(27) | 评论 (0) 编辑
 
摘要: 数组:其他语言的数组缺陷:添加/删除数组麻烦;js数组的缺点:被实现为对象,效率低;如果要实现随机访问,数组还是更好的选择;链表:结构图:基本代码:function Node (elem) { this.elem = elem; this.next = null;}function LLis...阅读全文
posted @ 2014-10-17 11:45 JinksPeng 阅读(17) | 评论 (0) 编辑
 
摘要: 队列是一种特殊的列表,数据结构为FIFO;定义:function Queue() { this.dataStore = []; this.enqueue = enqueue; this.dequeue = dequeue; this.front = front; this.bac...阅读全文
posted @ 2014-10-16 10:26 JinksPeng 阅读(15) | 评论 (0) 编辑
 
摘要: 栈是一种特殊的列表,数据结构为LIFO;定义:function Stack() { this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek; this.len...阅读全文
posted @ 2014-10-15 09:41 JinksPeng 阅读(16) | 评论 (0) 编辑
 
摘要: 列表:定义:一组有序的数据;function List() { this.listSize = 0; this.pos = 0; this.dataStore = []; this.find = find; .........................}方法:append:...阅读全文
posted @ 2014-10-13 09:31 JinksPeng 阅读(19) | 评论 (0) 编辑
 
摘要: JS中数组:只是一种特殊的对象,比其他语言中效率低;属性是用来表示偏移量的索引;在JS中,数字索引在内部被转化为字符串类型(这也是为什么写对象属性的时候可以不叫引号),因为对象中的属性必须是字符串类型;操作:判断:isArray();复制:浅复制:var arr1 = arr2;深复制:functi...阅读全文
posted @ 2014-10-12 13:29 JinksPeng 阅读(19) | 评论 (0) 编辑

数据结构和算法

标签:

原文地址:http://www.cnblogs.com/adebibi/p/4866099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!