算法和数据结构
文章平均质量分 80
东方潮汐
在探索前进的路上
展开
-
霍夫曼编码介绍和霍夫曼编码的接口与实现
霍夫曼编码介绍一种最古老而最优雅的数据压缩方法之一就是霍夫曼编码,它是一种基于最小冗余编码的压缩算法。最小冗余编码是指,如果知道一组数据中符号出现的频率,就可以用一种 特殊的方式来表示符号从而减少数据需要的存储空间。其方法是,使用较少的位对出现频率高的符号编码,用较多的位对出现频率低的符号编码。我们要意识到,一个符号不一定必须是文本字符,它可以是任何大小的数据,但往往它只占一个字节转载 2015-02-07 23:44:52 · 1311 阅读 · 0 评论 -
一位Google程序员的算法学习之路
来源: Lucida (@peng_gong)链接:http://zh.lucida.me/blog/on-learning-algorithms/关于严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的。转载 2016-04-10 20:43:05 · 1338 阅读 · 2 评论 -
生成特定分布随机数的方法
生成随机数是程序设计里常见的需求。一般的编程语言都会自带一个随机数生成函数,用于生成服从均匀分布的随机数。不过有时需要生成服从其它分布的随机数,例如高斯分布或指数分布等。有些编程语言已经有比较完善的实现,例如Python的NumPy。这篇文章介绍如何通过均匀分布随机数生成函数生成符合特定概率分布的随机数,主要介绍Inverse Ttransform和Acceptance-Rejection两种基础转载 2016-04-10 20:33:23 · 1132 阅读 · 0 评论 -
视觉直观感受 7 种常用的排序算法
1. 快速排序介绍:快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时转载 2015-07-04 23:06:20 · 318 阅读 · 0 评论 -
常用的STL查找算法
《effective STL》中有句忠告,尽量用算法替代手写循环;查找少不了循环遍历,在这里总结下常用的STL查找算法;查找有三种,即点线面:点就是查找目标为单个元素;线就是查找目标为区间;面就是查找目标为集合;针对每个类别的查找,默认的比较函数是相等,为了满足更丰富的需求,算法也都提供了自定义比较函数的版本;单个元素查找find() 比较条件为相等的查找f转载 2015-07-04 23:04:41 · 410 阅读 · 0 评论 -
几种锁算法的实现
MulticoreAbstract4种Lock的实现:TASLockTTASLockCLHLockMCSLockTASLock每一个Lock带有一个状态位,lock()与unlock()操作原子的改变状态位。false时可进入,true时spin。public class TASLock implements Lock{ AtomicBoole转载 2015-07-02 18:42:42 · 638 阅读 · 0 评论 -
速查表:常用算法和数据结构的复杂度
常用算法和数据结构的复杂度速查表,搜索算法数据结构时间复杂度空间复杂度 平均最差最差深度优先搜索 (DFS)Graph of |V| vertices and |E| edges-O(|E| + |V|)O(|V|)广度优先搜索 (BFS)Graph of |V| vertices转载 2015-06-08 22:33:19 · 454 阅读 · 0 评论 -
八种常用的排序算法
下面要讲到的8种排序都属于内部排序,既在内存中完成,主要从理论原理方面来分析的。插入排序①直接插入排序例:六个数12 15 9 20 6 31 24 用直接插入排序,如下图:思路:第一步:从给出的六个数中,随便拿出一个数,比如12,形成一个有序的数据序列(一个数当然是有序的数据序列了,不看12之外的转载 2015-06-08 22:22:13 · 429 阅读 · 0 评论 -
C++二叉查找树实现过程详解
什么是二叉查找树在数据结构中,有一个奇葩的东西,说它奇葩,那是因为它重要,这就是树。而在树中,二叉树又是当中的贵族。二叉树的一个重要应用是它们在查找中的应用,于是就有了二叉查找树。 使二叉树成为一颗二叉查找树,需要满足以下两点:对于树中的每个节点X,它的左子树中所有项的值都要小于X中的项;对于树中的每个节点Y,它的右子树中所有项的值都要大于X中的项。二叉查找树的基本转载 2015-06-08 22:04:36 · 462 阅读 · 0 评论 -
程序员必须知道的10大基础实用算法及其讲解
原文出处: cricode 欢迎分享原创到伯乐头条算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。转载 2015-05-16 20:55:24 · 318 阅读 · 0 评论 -
递归与尾递归(C语言)
在计算机科学领域中,递归式通过递归函数来实现的。程序调用自身的编程技巧称为递归( recursion)。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。转载 2015-05-16 23:20:31 · 396 阅读 · 0 评论 -
《算法的乐趣》作者王晓华:“玩”过就是收获
非商业转载请注明作译者、出处,并保留本文的原始链接:http://www.ituring.com.cn/article/198010王晓华是一位热衷于算法研究的程序员,他是CSDN算法专栏的超人气博主,也是《算法的乐趣》一书的作者。他2005年毕业于华中科技大学,目前在中兴通讯上海研发中心从事光纤接入网通讯设备开发,担任EPON(以太网无源光网络)业务软件开发经理,参与开发的PON设备转载 2015-05-16 21:24:23 · 1763 阅读 · 0 评论 -
张雨石:微博背后的那些算法
原文出处: 张雨石 欢迎分享原创到伯乐头条引言微博是一个很多人都在用的社交应用。天天刷微博的人每天都会进行着这样几个操作:原创、转发、回复、阅读、关注、@等。其中,前四个是针对短博文,最后的关注和@则针对的是用户之间的关系,关注某个人就意味着你成为他的粉丝,而他成为你的好友;@某个人意味着你想要他看到你的微博信息。微博被人们认为是“自媒体”,即普通大众分享与本身相关的“转载 2015-04-17 12:42:48 · 929 阅读 · 0 评论 -
排序算法 Sleep Sort
排序算法好像是程序员学习编程最多的算法,也可能是算法研究者们最喜欢研究的算法了。排序有很多很多的算法,比如,冒泡,插入,选择,堆,快速,归并等等(你可以看看本站以前的那些文章:可视化的排序,排序算法比较,显示排序过程的python)这里向大家介绍一个“巨NB”的排序算法――Sleep Sort。 闲言少说,请看下面的代码(用Shell脚本写的)#!/bin/bashfunc转载 2015-03-20 11:58:28 · 637 阅读 · 0 评论 -
并查集(Union-Find)算法介绍
来源: dm_vincent http://blog.csdn.net/dm_vincent/article/details/7655764本文主要介绍解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构,称为Union-Find。更多的信息可以参考Algorithms 一书的Section 1.5,实际上本文也就是基于它的一篇读后感吧。原文中转载 2016-04-10 20:50:01 · 737 阅读 · 0 评论