数据结构与算法
lxxpsp2007
这个作者很懒,什么都没留下…
展开
-
广度优先搜索(图基础)
广度优先搜索可回答两类问题。第一类问题:从节点A出发,有前往节点B的路径吗?第二类问题:从节点A出发,前往节点B的哪条路径最短?今天我们用图来解决这个问题使用图来创建问题模型。解决最短路径问题的算法被称为广度优先搜索 。什么是图图由节点和边组成。一个节点可能与众多节点直接相连,这些直接相连的节点被称为邻居。 无向图(undirected graph)没...原创 2019-11-29 17:09:20 · 220 阅读 · 0 评论 -
[google面试题]新研发的64种医药里有1种是致命毒药(64选1)
此题来至吴军的《信息论》新研发的[0-63]号新药,64种新药里有一个序号的药会致命,无毒的药混吃没事,只要吃了致命毒药一天内必死,现在只剩一天时间。要求:最少用多少只小鼠测试出致命毒药的序号。理解为最小成本的 64选1。分析:信息量为 log64 ( 2^6 = 64) 最少用到 6 bit (6只小鼠)。代码思路:每个新药的序号都用二进制表示,不足6位的用0左补齐6位。...原创 2019-11-27 10:53:39 · 1007 阅读 · 0 评论 -
十大经典排序算法系列(八) 堆排序(简单好理解版) js版
算法描述1 每次都将数组建立为二叉堆,构建成 [大或小] 顶堆,堆顶 (索引值为 0) 的值一定是整个数组里最[大或小] 的。2 弹出堆顶的值到新数组, 旧数组长度减少 1。3 重复 1 ,2完成排序, 重复新建堆的次数等于旧数组长度递减 1。方便理解的写法,后续出优化性能版。 'use strict'var arr = [1010, 1000, 999, 6...原创 2018-11-26 15:04:04 · 201 阅读 · 0 评论 -
十大经典排序算法系列(九) 归并排序 js版本
算法 类似 快速排序,都是分治思想。1 拆分数组 / 22 在两个数组取第一个值比较大小,按顺序 psuh,直到其中一个数组长度为0,然后合并, 完成部分排序。3 递归,直到完成排序。'use strict'var arr = [ 0, 1, 2, 5, 10, 12, 22, 50, 91, 123, 300, 444, 500, 666, 999, 1000, 1...原创 2018-11-28 21:45:41 · 169 阅读 · 0 评论 -
十大经典排序算法系列(一) 三种冒泡排序 加强性能版 js版本
加强版 一次循环中做两次比较实现原理1 在一次循环中比较出 最大 与 最小值, 分别放到数组的 两头2 内层循环每次 起始索引加 1, 最大索引值减 1 , 缩小循环范围. 每循环一次结束, 数组待比较长度数减2.3 记录元素位置交换的次数, 没有发生交换时, 退出外层循环, 完成排序.最坏的情况, 也比 优化版本减少一半的循环次数.var arr = [ 0, 0, 1, ...原创 2018-11-24 22:45:36 · 226 阅读 · 0 评论 -
十大经典排序算法系列(一) 三种冒泡排序 优化版 js版本
优化原理记录内层循环中, 相邻的元素交换位置的次数.内层循环只比较,相邻的元素没有发生交换, 说明数组已经有序.跳外层出循环结束排序.最好情况,该算法复杂度是 O(n)最坏情况,是一个等差数列, O(n^2) 与 普通版循环次数无区别var arr = [12, 0, 1, 2, 4, 3, 5, 333];function maoPao(arr) { ...原创 2018-11-24 22:43:13 · 273 阅读 · 0 评论 -
十大经典排序算法系列(一) 三种冒泡排序之 普通 js版本
Bubble Sort 原理1 比较相邻索引的元素(0,1)(1,2)(2,3)依据条件交换位置.以此类推到最后一个2 得出数组中最大的元素, 并交换位置到最后一个索引位.3 再让总索引值减 1, 让最大元素不进入下轮比较.4 重复上面直到结果时间复杂度 O(n2)'use strict'var arr = [0, 333, 1, 12, 123, 22, 2, ...原创 2018-11-24 22:36:29 · 163 阅读 · 0 评论 -
十大经典排序算法系列(七) 基数排序 js版
就是计数排序改进版 'use strict'var arr = [1010, 1000, 999, 666, 444, 333, 333, 123, 50, 22, 12, 10, 5, 2, 1, 0, 0];function radixSort(arr, numLenght) { function strLenght(str) { var str =...原创 2018-11-25 22:57:16 · 371 阅读 · 0 评论 -
十大经典排序算法系列(六) 计数排序 js版
整数排序 0-99 最好的算法1 把排序元素的值 当 tmpArr数组的索引, 计数出现次数,2 遍历 tmpArr, 按照 value 值的个数, unshift|push tmpArr 索引值 到 newArr 完成排序'use strict'var arr = [0, 0, 1, 2, 3, 4, 5, 10, 12, 22, 123, 333, 333, 444, 555...原创 2018-11-25 22:48:02 · 391 阅读 · 0 评论 -
十大经典排序算法系列(五) 快速排序 js 版
递归版递归点 如果数组的元素个数大于1,就再进行分解,递归点就是 数组元素个数大于1递归出口 当数组元素个数 <= 1'use strict'var arr = [0, 1000, 999, 666, 500, 300, 123, 100, 91, 50, 22, 12, 10, 5, 2, 1, 0, 1100];var count = 1;functio...原创 2018-11-25 22:45:20 · 135 阅读 · 0 评论 -
十大经典排序算法系列(四) 希尔排序 js 版
var arr = [ 0, 0, 1, 2, 3, 4, 5, 6, 12, 22, 123, 333, 333, 444, 555, 666, 777, 888, 999];function shellSort(arr) { var arrLenght = arr.length; var splitNum = Math.floor(arrLenght / 2);...原创 2018-11-25 22:41:03 · 162 阅读 · 0 评论 -
十大经典排序算法系列(三) 选择排序 js 版
原理1 外层循环 递增索引值 初始化第一个 比较的值2 内层循环每次取的第一个比较值 随外层 i 值 递增, 避免重复对比之前的值3 比较出更小的值, 赋值记录索引, 进行元素的位置调换var arr = [ 0, 0, 1, 2, 3, 4, 5, 6, 12, 22, 123, 333, 333, 444, 555, 666, 777, 888, 999];function ...原创 2018-11-25 22:36:30 · 171 阅读 · 0 评论 -
十大经典排序算法系列(二) 插入排序
原理1 元素依次比较大小, 按条件交换位置2 交换过位置的元素, 往回与之前的元素比较大小, 找到插入的位置,直到不符合交换位置的条件.跳出循环3 继续外层循环var arr = [ 0, 0, 1, 2, 3, 4, 5, 6, 12, 22, 123, 333, 333, 444, 555, 666, 777, 888, 999];function insterSort(ar...原创 2018-11-25 22:29:39 · 160 阅读 · 0 评论