热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

程序核心数据结构与算法

数据结构学科的定义:主要是为研究和解决如何使用计算机处理非数值问题而产生的理论、技术和方法。数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。数据结构由数据元素依某种逻辑

数据结构学科的定义:主要是为研究和解决如何使用计算机处理非数值问题而产生的理论、技术和方法。
数据结构:
是相互之间存在一种或多种特定关系的数据元素的集合。
数据结构由数据元素依某种逻辑关系组织起来,在数据结构上需要定义一组操作(运算)。

  1. 数据:是信息的载体,是计算机加工处理的对象.
  2. 数值数据和非数值数据
    (1)数值数据:包括整数、实数或复数。主要用于工程计算、科学计算。
    (2)非数值数据:包括字符、文字、图形、图象、语音等。
    用于情报检索、企业管理、图形图象、人工智能、远程教育、远程医疗、电子商务、电子图书馆和办公自动化等诸多领域。
  3. 数据元素:组成数据的基本单位。
    一个数据元素可以由若干个数据项组成。
    数据项是数据不可分割的最小单位。
数据结构

1、数据元素间的逻辑关系
2、基本的逻辑结构
集合结构:结构中的元素之间除了“同属于一个集合”的关系外,别无其它关系;
线性结构:结构中的数据元素之间存在一对一的关系。
树形结构:结构中的数据元素之间存在一对多的关系;
图结构:结构中的数据元素之间存在多对多的关系。

《程序核心数据结构与算法》 3KEHXP((PY7UKZXV5C4LKZP.png

3.数据结构包括以下四个方面:
一:数据元素及特性:
是数据结构中的最基本信息单元。
二:数据的逻辑结构:
对数据元素间的逻辑关系的描述。
三:数据的存储表示(存储结构)
物理结构:是指数据的逻辑结构在计算机中的存储形式。
数据在计算机内的组织方式
四:运算的定义和算法
数据结构上的执行的运算和实现
1.2 数据抽象和抽象数据类型
抽象:抽取事物的共同的和实质的东西,忽略其非本质的细节。
数据结构抽象为一种聚集结构
聚集结构:
图结构:图和网
集合结构:集合和字典
树形结构:树、二叉树、堆、优先权队列
线性结构:线性表、堆栈、队列、字符串、数组、文件。

数据结构可分成以下两部分:
(1)数据结构的规范:
逻辑结构和运算的定义
(2)数据结构的实现:
存储结构和运算算法实现

规范指明:做什么
实现解决:怎样做

《程序核心数据结构与算法》 image.png

算法初识

数据结构和算法是战场中的兵法。
码农是指挥作战的将军,代码是士兵和武器。
算法就是独立存在的一种解决问题的方法和思想。
算法的特性:
1、输入:算法具有0个或多个输入
2、输出:算法至少有1个或多个输出
3、有穷性:算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤都可以在可接受的时间内完成
4、确定性:算法中的每一步都有确定的含义 不会出现二义性
5、可行性:算法的每一步都是可行的 也就是说每一步都能够执行有限的次数完成

算法性能标准:

(1) 正确性 算法的执行结果应当满足预先规定的功能和性能要求。
(2) 简明性 一个算法应当思路清晰、层次分明、简单明了、易读易懂。
(3) 健壮性 当输入不合法数据时,应能做适当处理,不至于引起严重后果。
(4) 效率 有效使用存储空间和有高的时间效率。
(5) 最优性 解决同一个问题可能有多种算法,应进行比较,选择最佳算法。

算法效率衡量

算法的空间复杂度:是程序运行从开始到结束所需的存储空间。
存储空间分为:固定部分:常量、简单变量。与问题的实例的特征无关的。
可变部分:算法在某次执行中处理的特定数据的大小和规模有关。
两个含有100个元素的数组相加与含有10个元素的数组相加。
排序的算法中元素的个数可视为该实例的特征。

算法的时间复杂度:是程序运行从开始到结束所需的时间

执行时间反应算法效率:

一个问题的解决可能有多个解决算法,但是程序执行的时间却相差很多,由此判断:实现算法程序的执行时间可以反应出算法的效率,即算法的优劣。
但是如果设备性能低下,两个算法的程序运行时间大致会相同,因此单纯依靠运行运行的时间来比较算法的优劣并不一定是客观准确的。
程序的运行离不开计算机环境(硬件和操作系统)。

时间复杂度和“大O记法”

《程序核心数据结构与算法》 QQ图片20180704214108.jpg.png
《程序核心数据结构与算法》 QQ图片20180704214058.jpg.png
《程序核心数据结构与算法》 QQ图片20180704214614.jpg.png

假定计算机执行算法每一个基本操作的时间是固定的一个时间单位,有多少个基本操作就代表会花费多少时间单位。对于不同的机械环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同的,忽略机械环境影响而客观的反应算法的时间效率。

每台机器执行的总时间不同,但是执行基本运算数量大体相同

“大O记法”:对于单调的整数函数f,如果存在一个整数函数g和实常数c>0,使得对于充分大的n总有f(n)<=c*g(n),就说函数g是f的一个渐近函数(忽略常数),记为f(n) = O(g(n))。也就是说,在趋向无穷的极限意义下,函数f的增长速度收到函数g的约束,亦即函数f与函数g的特征相似。

时间复杂度:假设存在函数g,使得算法A处理规模为n的问题示例所用时间为T(n)=O(g(n)),则称O(g(n))为算法A的渐近时间复杂度,简称时间复杂度,记为T(n)

最重要的是其数量级和趋势。大O表示法 例如n的三次方。100n^3和8n^3。

最坏时间复杂度

算法完成工作最少需要多少基本操作:即最优时间复杂度&#8211;理想状态,无参考价值
算法完成工作最多需要多少基本操作:即最坏时间复杂度&#8211;一种保证,算法在此种程度的基本操作中一定能完成工作。
算法完成工作平均需要多少基本操作:即平均时间复杂度&#8211;全面评价,算法性质,因为应用算法的实例分布可能并不均匀而难以计算。
因此关注最坏时间复杂度。

时间复杂度的几条基本计算规则

1.基本操作,即只有常数项,认为其时间复杂度为O(1)
2.顺序结构,时间复杂度按加法进行计算
3.循环结构,时间复杂度按乘法计算
4.分支结构,时间复杂度取最大值。
5.判断一个算法的效率时,往往只需要关注操作数量的最高此项,其它次要项和常数项可以忽略
6.在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度。

常见时间复杂度

执行次数函数举例 阶 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n2+2n+1 O(n2) 平方阶
5log2n+20 O(logn) 对数阶
2n+3nlog2n+19 O(nlogn) nlogn阶
6n3+2n2+3n+4 O(n3) 立方阶
2n O(2n) 指数阶
注意,经常将log2n(以2为底的对数)简写成logn
O(1)

数据结构

数据元素之间不是独立的,存在特定的关系,这些关系便是结构。数据结构指数据对象中数据元素之间的关系。
数据结构解决的问题:一组数据如何保存,保存形式。
内置数据结构,比如列表、元组、字典
扩展数据结构,比如栈,队列等

算法与数据结构的区别

数据结构只是静态的描述了数据元素之间的关系。
高效的程序需要在数据结构的基础上设计和选择算法。
程序 = 数据结构 + 算法
总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体

抽象数据类型(ADT)的含义是指一个数学模型以及定义在此数学模型上的一组操作。即把数据类型和数据类型上的运算捆在一起,进行封装。引入抽象数据类型的目的是把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔开,使它们相互独立。
数据运算的五种:插入、删除、修改、查找、排序

大话数据结构

算法的时间复杂度定义
在进行算法分析时,语法总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度。记作:T(n)=O(f(n)).它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称时间复杂度。其中f(n)是问题规模n的某个函数。大O记法。一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法。


推荐阅读
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 本文通过思维导图的形式,深入解析了大型网站技术架构的核心原理与实际案例。首先,探讨了大型网站架构的演化过程,从单体应用到分布式系统的转变,以及各阶段的关键技术和挑战。接着,详细分析了常见的大型网站架构模式,包括负载均衡、缓存机制、数据库设计等,并结合具体案例进行说明。这些内容不仅有助于理解大型网站的技术实现,还能为实际项目提供宝贵的参考。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 深入浅出解读奇异值分解,助你轻松掌握核心概念 ... [详细]
  • 2012-06-0821:26:42  用matlab来建模,仿真不同时刻ostask在队列中的装载情况。输入参数如下作为初学者,M文件写的有点长。能实现功能就算学以致用了。cle ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • 深入解析Linux内核中的进程上下文切换机制
    在现代操作系统中,进程作为核心概念之一,负责管理和分配系统资源,如CPU和内存。深入了解Linux内核中的进程上下文切换机制,需要首先明确进程与程序的区别。进程是一个动态的执行流,而程序则是静态的数据和指令集合。进程上下文切换涉及保存当前进程的状态信息,并加载下一个进程的状态,以实现多任务处理。这一过程不仅影响系统的性能,还关系到资源的有效利用。通过分析Linux内核中的具体实现,可以更好地理解其背后的原理和技术细节。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 本课程深入探讨了 Python 中自定义序列类的实现方法,涵盖从基础概念到高级技巧的全面解析。通过实例演示,学员将掌握如何创建支持切片操作的自定义序列对象,并了解 `bisect` 模块在序列处理中的应用。适合希望提升 Python 编程技能的中高级开发者。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 当前物联网领域十大核心技术解析:涵盖哪些关键技术?
    经过近十年的技术革新,物联网已悄然渗透到日常生活中,对社会产生了深远影响。本文将详细解析当前物联网领域的十大核心关键技术,包括但不限于:1. 军事物联网技术,该技术通过先进的感知设备实现战场环境的实时监测与数据传输,提升作战效能和决策效率。其他关键技术还包括传感器网络、边缘计算、大数据分析等,这些技术共同推动了物联网的快速发展和广泛应用。 ... [详细]
author-avatar
幸运的anan本人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有