数据结构与算法分析-索引

作者:xiabodan 出处:http://blog.csdn.net/xiabodan

法和数据结构是计算机科学的核心内容。作为程序猿,编程是我们的实战项目。然而,写出程序还不够。一个程序在应对一些大型而复杂的情况时。会耗费大量的时间。我们能够非常easy写出一个从文件里找到一个词的程序。比方逐词扫描。看是否相符。但假设我们的文件有几十TB,并且要从文件里找到上百个词,逐个扫描的办法就差点儿不可行。我们须要优化程序,以便我们的程序能够应对复杂问题。

算法研究解决这个问题的方法,而数据结构则是设计一种更好的组织数据和使用数据的方式。两者有非常强的相互依赖关系,所以往往放在一起讨论。(摘自vamei博客: http://www.cnblogs.com/vamei

作为一枚都快要毕业的研究僧。非科班出身,主要做图像处理,机器人视觉方面的工作。本科做嵌入式硬软件。以为自己的编程还算过得去,研究生期间看过非常多国外大牛写的project。自己也都是在用别人的工程,感慨别人的专业技能太强了,详细表如今既能推公式,写paper,Oral presentation如此的精彩,就连算法的代码也写得如此之好,不说精湛嘛至少也是高效、整洁、稳定,看过别人的Curriculum Vitae(CV),skills从C/C++,matlab,python一直到PHP。SQL;OpenCV,GL,MP能用的都会了,我认为这都得益于他们扎实的语言基础,当然数据结构与算法也是当中比較重要的部分。

看过非常多东西比不代表就会了,细节部分太重要了,以至于当我想亲自构建一个project的时候感觉思路有,却非常多细节地方不明不白,上次去面试要现场写算法程序才发现,理解了和懂了是两码事,基础太菜伤不起。

本系列文章将从最简单一步一步在懂了的前提下亲自己主动手写。

平台採用raspberry 2 B,注意执行结果可能会与VS2012有出入。期间会穿插一些Linux的基础比方命令,Makefile编写。多线程编程等。

最后会完毕一个小的数据结构project,代码见github:https://github.com/xiabodan/DataStructure 保持持续更新。Linux用户直接download代码:

git clone https://github.com/xiabodan/DataStructure.git

数学知识复习

排序算法(插入。希尔,选择。冒泡,归并。快排,堆排)

表(list)

栈(stack)

队列(queue)

树、二叉树、二叉查找树

散列(hashing)

优先队列(heap)

贪念算法

參考:

数据结构与算法分析-C语言描写叙述[M],机械工业出版社

时间: 2024-10-15 18:40:48

数据结构与算法分析-索引的相关文章

数据结构1:数据结构和算法分析

问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法,以递减顺序将数组排序,则第k个位置上的元素就是我们需要的元素 2.稍微好一些的做法,将k个元素读入数组并以递减顺序排序,接着将接下来的元素再逐个读入,当新元素被读到时,如果它小于数组中的第k个元素则忽略之,否则将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组,当算法终止时,位于第k个位置上

数据结构和算法分析

转自[五月的仓颉] http://www.cnblogs.com/xrq730/p/5122436.html 数据结构 数据结构是计算机存储.组织数据的方式,是指数据相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率(这就是为什么我们要研究数据结构的原因),数据结构往往同高效的检索算法和索引技术相关. 常见的数据结构有数组.栈.队列.链表.树.散列等,这些数据结构将是本数据结构的分类中重点研究的对象. 算法分析 算法是为求解一个问题需要遵

数据结构与算法分析(4)算法分析的编程练习

    数据结构和算法分析的编程习题.     (1)生成不重复的随机数,并且具有上界和下界.可以产生有序的,也可以产生无序的. 知识: C编程语言不允许返回整个数组作为函数的参数.但是,您也可以返回一个指针,没有索引到一个数组中指定数组的名称. 例如: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 int *getRandom(){ 6 static int r[10]; 7 int i

【转】数据结构和算法分析

问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法,以递减顺序将数组排序,则第k个位置上的元素就是我们需要的元素 2.稍微好一些的做法,将k个元素读入数组并以递减顺序排序,接着将接下来的元素再逐个读入,当新元素被读到时,如果它小于数组中的第k个元素则忽略之,否则将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组,当算法终止时,位于第k个位置上

数据结构与算法分析-第3章

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-family: monospace; color: red } .done { font-family: monospace; color: green } .priority { font-fami

数据结构与算法分析 - 7 - 图

1.图的相关概念 图:G = (V,E),集合V中的元素被称为顶点,集合E中的元素是集合V中的某一对顶点(u,v)之间的边. 约定集合V和集合E均为有限集,其规模分别记为n = | V |,e = | E |. 边:顶点之间存在的某种关系就是边.可分为有向边和无向边.若边(u,v)中的顶点u和v的次序无所谓,即(u,v) = (v,u),边(u,v)即为无向边,反之即为有向边. 有向图和无向图:当一个图中的所有边都是无向边时,该图为无向图.而只要一个图中存在有向边,该图就是有向图. 度:与某顶点

学习记录:数据结构与算法分析c++版

数据结构与算法分析c++版 学习记录 一.绪论 1.数据结构的必要性 计算机程序被设计出来的目的不仅仅是为了计算,同时其也要完成数据的提取和检索任务,并尽可能地高效快速.在这个意义下,数据结构和算法分析作为程序的核心,就显得尤为重要.如何利用数据结构和算法,设计出简单易懂,并且高效地利用计算机资源的程序是这门课的核心议题. Def    一个算法被称为有效的(effective),如果其能在计算机的资源限制下解决相应问题:这些限制通常包括计算机储存量限制,以及算法运行的时间限制.    算法的消

《数据结构与算法分析》学习笔记(二)——算法分析

一.对算法分析方法的最简单的理解和使用方法 1.首先大家可能一般会被那些数学的概念搞晕,其实简单理解下来,就是假设任何语句执行的效率都是一样的,所以设定每一个语句的执行时间都是一个时间单位,那么只要计算这个程序到底执行了多少语句,就可以算出其时间复杂度. 2.其次就是我们要明白,我们是个估算,所以可以进行化简,明显我们可以忽略那些相对来说低阶的项,只分洗最高阶项.然后主要就是有这些常见的法则: (1)FOR循环 一次for循环的运行时间至多是该for循环内语句的运行时间乘以迭代次数. (2)嵌套

《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——Alpha-Beta剪枝

2014.07.08 22:43 简介: “搜索”与“剪枝”几乎是如影随形的.此处的“搜索”指的是带有回溯算法的深度优先搜索. 在之前的“Minimax策略”中我们给出了一个三连棋的程序,运行后你就知道计算一步棋要花多少时间. 为了计算最优的一步棋,我们可能需要递归9万多次.如果毫无疑问这种阶乘式的穷举过程必须通过剪枝来加速. 本篇介绍一种用于Minimax策略的剪枝思路——α-β剪枝. 剪枝的英语是pruning,所以不要想当然说成trimming. 图示: 在上一篇讲解Minimax策略的博