数据结构和算法
等待你的蜕变
这个作者很懒,什么都没留下…
展开
-
快排为什么那么快
目录0. 前言1. 猜数字2. 称球3. 排序 3.1 为什么堆排比快排慢 3.2 为什么快排其实也不是那么快 3.3 基排又为什么那么快呢4. 信息论!信息论?5. 小结0. 前言知道这个理论是在TopLanguage上的一次讨论,先是g9转了David MacKay的一篇文章,然后引发了牛转载 2016-07-24 10:45:39 · 4479 阅读 · 2 评论 -
二叉树前序、中序、后序遍历非递归写法的透彻解析
前言在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序遍历最难。我们的讨论基础是这样的://Binary Tree Nodetypedef struct node{ int data; struct node* lchild转载 2016-09-11 13:31:09 · 1920 阅读 · 0 评论 -
快速排序原理剖析
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数转载 2016-08-28 11:06:32 · 464 阅读 · 0 评论 -
分治算法
分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的转载 2016-07-31 22:01:39 · 315 阅读 · 0 评论 -
二叉树到红黑树
二叉树查找树又叫二叉排序树。二叉查找树或者是一棵空树,或者是一棵具有如下性质的二叉树: 对于任何一个结点X 若它的左子树非空,则左子树上所有结点的值均小于等于X的值; 若它的右子树非空,则右子树上所有结点的值均大于等于X的值; 按中序遍历二叉查找树,所得到的中序遍历序列是一个递增(或递减)的有序序列。 我们来说二叉查找树当转载 2016-07-19 13:24:29 · 13508 阅读 · 2 评论 -
二叉树的应用详解 - 数据结构
概述:平衡树——特点:所有结点左右子树深度差≤1排序树——特点:所有结点“左小右大字典树——由字符串构成的二叉排序树判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重)带权树——特点:路径带权值(例如长度)最优树——是带权路径长度最短的树,又称 Huffman树,用途之一是通信中的压缩编码。1. 二叉排序树(二叉查找树Binary Sea转载 2016-07-19 13:22:23 · 1064 阅读 · 0 评论 -
ThreadLocal的正确用法
用法一:在关联数据类中创建private static ThreadLocalThreaLocal的JDK文档中说明:ThreadLocal instances are typically private static fields in classes that wish to associate state with a thread。如果我们希望通过某个类将状态(例如用户ID、事务ID)转载 2016-07-19 10:50:42 · 492 阅读 · 0 评论 -
堆和栈的区别
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教转载 2016-07-28 00:43:49 · 270 阅读 · 0 评论 -
为什么hash作为内存使用的经典数据结构?
听到这样说法:hash是内存中使用的经典数据结构。内存是典型的随机访问设备。 为什么hash这种数据结构很适合内存使用呢?如何理解内存是随机访问设备呢? 因为我想知其所以然,如何理解背后的原因,我花费点时间来学习一番。 我之前学过搜索引擎中的倒排索引,其中的单词词典就是使用hash方式实现:对关键词做hash值,同样hash值的关键词都归到一起。这是转载 2016-07-28 00:39:08 · 2400 阅读 · 0 评论 -
算法+数据结构的本质
何谓数据结构数据结构是什么?它是组织内存中对象或基本类型数值(primtive types)的形式,为了更好地组织和使用这些对象而慢慢发展起来的固有形式,惯用法(idioms),是计算机开发领域用处理数据的方法来解决问题的一套科学.对数据结构知识的系统整理最初源于一个科学者的一本书1.以上是常见于一些教科书上对数据结构与算法的定义。 所有这些,是针对数据结构转载 2016-07-28 00:32:21 · 5312 阅读 · 0 评论 -
排序算法、时间复杂度与信息熵
在这篇文章里,我们从信息论的角度证明了,基于比较的排序算法需要的比较次数(在最坏情况下)至少为log2(n!),而log(n!)=Θ(nlogn),这给出了比较排序的一个下界。但那里我们讨论的只是最理想的情况。一个事件本身所含的信息量是有大小之分的。看到这篇文章之后,我的思路突然开阔了不少:信息论是非常强大的,它并不只是一个用来分析理论最优决策的工具。从信息论的角度来分析算法效率是一件很有趣的事,转载 2016-07-25 09:50:50 · 1749 阅读 · 0 评论 -
理解数据结构
理解数据结构最近在学习各种数据结构,于是就在想,为什么我们需要数据结构呢? 为什么要设计这么多数据结构?数据结构到底解决了我们什么样的问题?我们提到 数据结构 时,一般是指计算机科学中的一个概念, 但是从本质上讲,数据结构应该是指对数据的一种组织方式。既然如此,我们没必要非在计算机科学领域中讨论 概念本身,把它放在其它领域中,可能更能加强我们的理解。就说图书管吧,假如你转载 2017-04-04 23:16:03 · 257 阅读 · 0 评论