王道数据结构 第一章 绪论

今天开始寒假的写写写(记笔记)生活。
本弱渣在经历了期末的洗礼之后开始继续计算机专业课的学习,由于即将参加春招,所以先从最基础最重要的数据结构开始复习。之前刷笔试算法题的时候觉得还算顺手,但是总是觉得有些地方基础不够牢固,所以选择使用王道考研的数据机构来夯实基础,希望能够在面试中能够有更好的表现吧,之后可能还会再把《剑指offer》中的一些不太熟练的题目写到简书上面来。

废话不多说,先是第一章的基本概念1

数据结构的基本概念

基本概念和术语

  1. 数据
    数据是信息的载体,是描述客观事物属性的数,字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
  2. 数据元素
    数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成。数据项是构成数据元素的不可分割的最小单元。例如,学生记录就是一个数据元素,它由学号,姓名,性别等数据项组成。
  3. 数据对象
    数据对象是具有相同性质的数据元素的集合,是数据的一个子集。例如整数数据对象是集合 {0,+-1,+-2...}
  4. 数据类型
    数据类型是一个值的集合和定义在此集合上一组操作的总称
  • 原子类型: 其值不可再分
  • 结构类型: 其值可以再分成若干成分
  • 抽象数据类型: 抽象数据组织和与之相关的操作
  1. 抽象数据类型(ADT)
    ADT是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何实现和表示无关,不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。通常用(数据对象,数据关系,基本 操作集)这样的三元组来表示抽象数据类型

  2. 数据结构
    在任何问题中,数据元素都不是独立存在的,它们之间存在着某种关系,这种数据元素之间的关系成为结构数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
    数据结构包括三方面的内容,逻辑结构,存储结构,数据的运算。数据逻辑结构和存储结构是密不可分的两个方面。算法的设计取决于选定的逻辑结构,算法的实现依赖于所采用的存储结构。


数据结构的三要素

数据的逻辑结构

逻辑结构是元素之间的逻辑关系,即从逻辑关系上描述数据。它与数据的存储无关,是独立于计算机的。数据的逻辑结构分为线性结构和非线性结构,线性表是典型的线性结构。集合,树,图是典型的非线性结构。

集合:结构中的元素除了同属于一个集合的关系外,没有其他关系
线性结构:结构中的数据之间仅存在一对一的关系
非线性结构:结构中的数据之间存在一对多的关系
图状结构&&网状结构:结构中的元素之间存在多对多的关系

数据的存储结构

存储结构是指数据结构在计算机中的表示,也称物理结构。它包括数据元素的表示和关系的表示。数据的存储结构是逻辑结构用计算机语言的实现,它依赖于计算机语言。数据的存储结构主要有:顺序存储,链式存储,索引存储和散列存储。

  1. 顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元里,元素之间的关系由存储单元的邻接关系来体现。优点:可以随机存取,每个元素占用最少的存储空间。缺点:只是使用相邻的一整块存储单元,可能产生较多的外部碎片。

  2. 链接存储:不要求逻辑上相邻的单元在物理上也相邻。借助指示元素存储地址的指针表示元素之间的逻辑关系。优点:不会出现碎片现象,充分利用所有存储单元。缺点:每个元素因存储指针而占用额外的存储空间,并且只能实现顺序存取。

  3. 索引存储:在存储信息的同时,还建立其附加的索引表。索引表的每一项成为索引项,索引项的一般形式是:(关键词,地址)。其优点是检索速度快,缺点是增加了附加的索引表,占用较多的存储空间。在删除和增加数据时要修改索引表,会花费较多的时间。

  4. 散列存储:根据元素的关键字直接计算出该元素的存储地址,也称HASH。优点是检索,增加,删除节点的速度都很快。缺点:如果散列函数不好可能会出现元素存储单元的冲突,解决冲突需要增加时间和空间开销。

数据的运算

施加在数据上的运算包括运算的定义和实现。定义针对逻辑结构:指出具体的功能,实现针对存储结构:指出运算的具体步骤。

基本概念1 完!!!
(之前没有系统的复习过这些东西,在有了一定代码量之后看这些概念真有醍醐灌顶之感)


接下来是第一部分的习题的一些知识点提炼

  1. 在存储数据时,不仅要存储各个数据元素的值,还要存储数据元素之间的关系。
  2. 链式存储设计时,接点内的存储单元地址一定连续。
  3. 可以用抽象数据类型去定义一个完整的数据结构。

问答题:

  1. 对于两种不同的数据结构,逻辑结构和物理结构一定不相同吗?
    A:数据的运算也是数据结构的重要方面。比如二叉排序树和二叉树它们的逻辑和物理结构完全相同。两者的运算定义不同。二叉树一般表示层次关系,二叉排序树通常用于排序和查找。
  2. 试举一例,说明对相同的逻辑结构,同一种运算在不同的存储方式下实现,运算效率不同。
    A:线性表可用顺序存储,也可用链式存储。就插入删除而言,顺序存储O(n),链式存储O(1),存取反之。

接下来总结基础知识第二部分

算法和算法评价

算法的基本概念

算法是对特定问题求解步骤的一种描述。它是指令的优先序列,其中每一条指令表示一个或多个操作。
算法具有以下五个特性

  1. 有穷性:一个算法必须总是(对任何合法的输入值) 在执行有穷步之后结束,且每一步都在有穷的时间内完成。
  2. 确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。对于相同的输入只能产生相同的输出。
  3. 可行性:一个算法是可行的。算法中描述的操作都是可以通过已经实现的基本运算执行有限次实现。
  4. 输入: 一个算法有零个或多个输入。输入取自于某个特定的对象的集合。
  5. 输出: 一个算法有多个或一个输出。输出是同输入有着某种特定关系的量。

好的算法应该考虑如下目标

  1. 正确性
  2. 可读性
  3. 健壮性:对输入非法数据,也要能做出适当反应或进行处理。
  4. 效率于低存储量需求

算法效率的度量

算法效率的度量是通过时间复杂度和空间复杂度来描述的。

时间复杂度

最坏时间复杂度:在最坏情况下的时间复杂度
平均时间复杂度:所有输入实例在等概率出现的情况下,算法的期望运行时间
最好时间复杂度
分析时间复杂度的两条guize

  1. 加法规则:T(n) = T1(n)+T2(n) = O(f(n)) + O(g(n)) = O(max(f(n), g(n)))
  2. 乘法规则:T() = T1(n) * T2(n) = O(f(n)) * O(g(n))= O(f(n) * g(n))
    常见的渐进时间复杂度有
    O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
空间复杂度

定义为该算法所耗费的存储空间,他是问题规模n的函数。渐进空间复杂度也常简称为空间复杂度。
S(n) = O(g(n))
程序中需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。若输入数据所占空间只取决于问题本身,于算法无关,则只需分析除输入和程序之外的额外空间。
算法原地工作是指算法所需辅助空间是常量,即O(1)


第二部分的知识点罗列完毕,下面是习题中提取的盲点
分析如下代码的执行次数

int m = 0;
for(int i = 1; i <= n; i++) {
    for(int j = 1; j <= 2 * i; j++) m++;
}

执行次数为n(n+1)

斐波那契数列:递归算法时间复杂度O(2^n)(具体计算略复杂),非递归时间复杂度O(n)


嘛,这就是寒假第一次的笔记了,希望不要烂尾,不要烂尾!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,976评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,249评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,449评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,433评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,460评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,132评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,721评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,641评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,180评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,267评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,408评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,076评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,767评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,255评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,386评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,764评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,413评论 2 358

推荐阅读更多精彩内容

  • 公司的经理大哥建议过我,说趁年轻要深入学习算法与数据结构,设计模式, APP 架构,当然也包括 iOS 底层的一些...
    Q以梦为马阅读 6,675评论 7 111
  • 1、算法的概念 (1)概念:是指解题方案的准确而完整的描述。 【考题1】在计算机中,算法是指() A查询方法B加工...
    成都小菜阅读 1,595评论 0 15
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,151评论 0 13
  • 下班回家在休息之余拿出我的“杂货本”,翻看以前的随意记载,小小的本子里,有诗,有美文摘抄,有日记,还有一些感想和感...
    春夏AI阅读 174评论 0 1
  • 512说起来是那么的顺畅,算一算,六年过去了。 六年前的今天,我还在一中的操场等着上体育课,突然觉得一阵恶心,然后...
    仂七阅读 146评论 0 0