数据结构
文章平均质量分 92
Zhang_P_Y
关注机器学习、计算机视觉、嵌入式(MCU、DSP、ARM)和桌面开发等领域
展开
-
迭代是人,递归是神(迭代与递归的总结:比较)
在计算机编程实现中有常常两种方法:一曰迭代(iterate);二曰递归(recursion)。从“编程之美”的角度看,可以借用一句非常经典的话:“迭代是人,递归是神!”来从宏观上对二者进行把握。从概念上讲,递归就是指程序调用自身的编程思想,即一个函数调用本身;迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想。从直观上讲,递归是将大问题化为相同结原创 2015-07-12 13:55:30 · 24081 阅读 · 4 评论 -
排序算法十:桶排序
排序算法十:桶排序引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。系列博文的上一篇讲述了基数排序,本文讲述它的“表亲”:桶排序(bucket sort)。原创 2015-09-29 09:56:11 · 24208 阅读 · 3 评论 -
查找searching
查找searching 在有序数列中查找某一个数据时候的算法设计查找表的分类 静态查找表:只进行查找操作 动态查找表:不断的插入不存在,删除已存在查找表的操作 查找、插入、删除查找也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素。 关键字,是数据元素中某个数据项的值,它可以标识一个数据元素查找方法评价 查找速度 占用存储空间多少原创 2015-09-17 16:07:44 · 1762 阅读 · 0 评论 -
《数学之美》之计算复杂度
《数学之美》之计算复杂度说明:本文是总结自《数学之美》的附录,关于计算复杂度的论述。在数据结构的博客专栏中实际上已经论述过计算复杂度和时间复杂度。这里从另一方面进行一种认识,加深理解。原创 2015-10-07 21:26:59 · 1951 阅读 · 0 评论 -
伪代码
伪代码声明:引用请注明出处http://blog.csdn.net/lg1259156776/说明:从来没有认真的想过学习一下伪代码,因为大部分只是在阅读,能够看懂也就没有深入了解一下如何编写伪代码,下面所进行的总结就是关于如何使用伪代码。原创 2015-10-12 11:22:52 · 15144 阅读 · 1 评论 -
排序算法一:直接插入排序
在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。原创 2015-09-23 22:08:26 · 53557 阅读 · 4 评论 -
如何模拟高斯分布的随机数发生器?
在一些算法中,经常会用到随机数,最常用的随机数有两种,一是服从均匀分布的随机数,二是服从高斯分布(正态分布)的随机数。在标准C中并没有产生高斯分布的随机数发生器,只有服从均匀分布的随机数发生器rand(),那么如何通过rand()来模拟出高斯分布特征的伪随机数呢?这就是本文的话题。实验原理:高斯分布的随机数在概率上服从高斯分布,如果通过rand()产生某个区间的随机数,通过高斯分布的概原创 2015-07-21 09:55:23 · 12238 阅读 · 1 评论 -
散列表
散列表引言 查找也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素;关键字,是数据元素中某个数据项的值,它可以标识一个数据元素(主关键字和次关键字)。(比如在一个学生信息的记录中,给出的关键字是学生的学号,我要查找这个学生的信息记录,这就是查找的一个具体应用) 查找方法的评价指标有如下几个 查找速度 占用存储空间多少 算法本身复杂程度原创 2015-09-16 15:20:59 · 2007 阅读 · 0 评论 -
in-place数据交换
经典的排序问题问题描述 一个数组中包含两个已经排好序的子数组,设计一个in-place(原位操作)算法来对这个数组排序。测试数据为 a[] = 1 4 5 7 8 9 2 3 6 10 11 。原创 2015-09-24 10:23:43 · 3950 阅读 · 1 评论 -
排序算法二:二分(折半)插入排序
在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。上一篇博文《排序算法一:直接插入排序》讲述了直接插入排序,本文讲述另一种插入排序算法:二分(折半)插入排序。原创 2015-09-24 11:11:51 · 14950 阅读 · 3 评论 -
测试代码的编写
测试代码的编写说明:代码测试可能是软件测试的一个简化,一般是程序开发人员自己为了维护测试一段代码编写的健壮性所进行的一些测试。通常包括正向测试、负向测试和边界测试。而通常在程序开发阶段进行,并根据测试结果修改代码,以增加代码的健壮性。本文简单的对这三种测试进行说明,不对之处敬请指出。原创 2015-10-13 22:50:56 · 2395 阅读 · 0 评论 -
布隆过滤器
布隆过滤器声明:引用请注明出处http://blog.csdn.net/lg1259156776/引言 在日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是否在一个集合中。比如在字处理软件中,需要检查一个英语单词是否拼写正确(也就是要判断它是否在已知的字典中);在FBI,一个嫌疑人的名字是否已经在嫌疑名单上;在网络爬虫里,一个网址是否被访问过等等。最直接的方法就是将集合中全部的元素存在原创 2015-09-24 16:16:37 · 1208 阅读 · 0 评论 -
【数据结构与算法】k-d tree算法
k-d tree算法 k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。应用背景 SIFT算法中做特征点匹配的时候就会利用到k-d树。而特征点匹配实际上就是一个通过距离函数在高维矢量之间进行相似性检索的问题。针对如何快速而准确地找到查询点的近邻,现在提出了很多转载 2017-11-06 16:03:31 · 730 阅读 · 0 评论 -
排序算法十一:计数排序
排序算法十一:计数排序引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。系列博文的上一篇讲述了桶排序,本文讲述:计数排序(Counting sort)。原创 2015-09-29 10:20:23 · 2013 阅读 · 0 评论 -
排序算法九:基数排序
排序算法九:基数排序声明引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。系列博文的前八篇讲述了插入排序、交换排序、选择排序和归并排序等四种不同类型,本文将讲述第五大类的排序算法:基数排序。原创 2015-09-28 13:52:43 · 4598 阅读 · 2 评论 -
排序算法八:归并排序
排序算法八:归并排序引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。系列博文的前七篇分别讲述了插入排序、交换排序和选择排序,本文讲述第四大类的排序算法:归并排序。原创 2015-09-27 20:34:38 · 2273 阅读 · 0 评论 -
数据结构(二):线性表的使用原则以及链表的应用-稀疏矩阵的三元组表示
上一篇博文中主要总结线性表中的链式存储结构实现,比如单向链表、循环链表,还通过对比链表和顺序表的多项式的存储表示,说明链表的优点。可以参看上篇博文http://blog.csdn.net/lg1259156776/article/details/47018813下面先对没有介绍的链表中的双链表进行介绍,并通过稀疏矩阵的三元组的链式结构来深入理解较为复杂的链表存储结构。最后对三次博文所讲述的内容原创 2015-07-27 00:23:40 · 3485 阅读 · 0 评论 -
数据结构(三):非线性逻辑结构-树
经过数据结构(二)系列文章,已经把线性结构中最常用的数据结构进行了介绍,包括顺序存储结构中顺序表、顺序队列和顺序栈,链式存储结构中的链表、链栈和链队列。线性结构是数据结构中最为常见也最简单的逻辑结构。下面将进入非线性逻辑的数据结构部分,还记得下面的一副数据结构的分类图吧,对于非线性逻辑,主要介绍树和图。本文主要先针对树进行复习和总结,后续的博文将逐渐深入到图等更为复杂的非线性逻辑数据结构。原创 2015-07-29 13:12:29 · 2566 阅读 · 0 评论 -
数据结构(一):数据结构的基本概念和算法的时间和空间复杂度
数据结构讨论的范畴计算机技术的两大支柱:1是数据结构,2是算法。在某种程度上讲,程序设计等同于数据结构+算法。程序设计是为计算机设计一组指令集,算法是解决问题的策略,数据结构是模型。问题包括:数值计算,解方程,非数值计算的问题:计算机对弈,棋盘,棋子如何表示(模型),规则策略(算法)我们讨论的是:实体的数学模型(非数值计算)及其上的操作如何在计算机上表示和实现。原创 2015-07-20 22:38:32 · 14385 阅读 · 0 评论 -
数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)
还记得数据结构这个经典的分类图吧:pic1今天主要关注一下线性表。什么是线性表线性表的划分是从数据的逻辑结构上进行的。线性指的是在数据的逻辑结构上是线性的。即在数据元素的非空有限集中(1) 存在唯一的一个被称作“第一个”的数据元素,(2) 存在唯一的一个被称作“最后一个”的数据元素,(3) 除第一个外,集合中的每个数据元素均只有一个前继元素,(4)除最后一个外,集合中的每个原创 2015-07-21 22:46:50 · 7577 阅读 · 0 评论 -
数据结构(三):非线性逻辑结构-二叉树
接着上一次对非线性逻辑数据结构树的内容,开启对二叉树的深入复习和总结。首先还是先回顾一下几个重要的概念:一、回顾1. 满二叉树与完全二叉树满二叉树指的是除了叶子节点外所有的节点都有两个子节点。这样可以很容易的计算出满二叉树的深度,要掌握满二叉树的一些性质。完全二叉树则是从满二叉树继承而来,指的所有的节点按照从上到下,从左到右的层次顺序依次排列所构成的二叉树称之为完全二叉树。所以可以原创 2015-08-02 21:39:05 · 2653 阅读 · 0 评论 -
数据结构(二):链表、链队列
上一篇博文中主要总结线性表的顺序存储结构实现,比如顺序表、顺序队列和顺序栈。具体可以参考上篇博文http://blog.csdn.net/lg1259156776/article/details/46993591下面要进行学习和总结的是线性表的链式存储结构实现,比如链表和链队列。顺序存储结构的优缺点优点是逻辑相邻,物理相邻,可随机存取任一元素,存储空间使用紧凑;缺点是插入、删除原创 2015-07-23 11:32:18 · 3171 阅读 · 0 评论 -
数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树
本篇博文主要介绍几个特殊的二叉树,堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、线索二叉树,它们在解决实际问题中有着非常重要的应用。原创 2015-08-04 23:15:50 · 6400 阅读 · 0 评论 -
排序算法六:选择排序之直接选择排序
排序算法六:选择排序声明:引用请注明出处http://blog.csdn.net/lg1259156776/引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。系列博文的前五篇分别讲述了插入排序和交换排序,本文介绍直接选择排序这一似乎是最慢的排序算法。原创 2015-09-26 10:24:35 · 6959 阅读 · 1 评论 -
排序算法五:交换排序之快速排序
排序算法五:交换排序之快速排序声明:引用请注明出处http://blog.csdn.net/lg1259156776/引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。系列博文的前三篇讲述了插入排序的三种不同类型,本文讲述第二大类的排序算法:交换排序,包括冒泡排序和快速排序。原创 2015-09-25 11:32:49 · 2828 阅读 · 1 评论 -
排序算法七:选择排序之堆排序
排序算法七:选择排序之堆排序声明:引用请注明出处http://blog.csdn.net/lg1259156776/引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。上博文讲述了选择排序中的简单排序算法,本文介绍的堆排序是树性选择排序,采用堆这个数据结构来辅助排序。原创 2015-09-26 11:37:09 · 3837 阅读 · 2 评论 -
排序算法四:交换排序之冒泡排序
排序算法四:交换排序之冒泡排序声明:引用请注明出处http://blog.csdn.net/lg1259156776/引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。系列博文的前三篇讲述了插入排序的三种不同类型,本文讲述第二大类的排序算法:交换排序,包括冒泡排序和快速排序。原创 2015-09-25 11:31:11 · 3953 阅读 · 3 评论 -
排序算法三:Shell插入排序
在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。上一篇博文《排序算法二:二分(折半)插入排序》讲述了直接插入排序,本文讲述第三种插入排序算法:Shell插入排序。原创 2015-09-24 23:21:24 · 2674 阅读 · 1 评论 -
【数据结构】【计算机视觉】并查集(disjoint set)结构介绍
1.简述 在实现多图像无序输入的拼接中,我们先使用surf算法对任意两幅图像进行特征点匹配,每对图像的匹配都有一个置信度confidence参数,来衡量两幅图匹配的可信度,当confidence>conf_threshold,我们就认为这两幅图可以拼接,属于一个全景拼接的集合,然后扩展这个集合就可以确定最大的可拼接集合,排除一些无效的图像,然后进行后续的拼接。转载 2017-11-06 16:32:15 · 534 阅读 · 0 评论