数据结构及算法总结(概述)
开头瞎逼逼
程序的本质:程序是为了实际的问题而存在的,从本质上而言,程序是解决问题的步骤描述。
首先要理解实际问题,确认问题类型(如:数值计算、求最小值),确认求解的步骤(如:打开文件、读数据、关闭文件、计算和)。
优秀的开发者需要追求代码的高“性价比”,用尽量少的内存空间解决问题,用尽量少的步骤解决问题。
程序是为了具体问题而存在的,程序需要围绕问题的解决进行设计,同一个问题可以有多种解决方案。
数据结构-->数据的艺术
数据结构主要研究非数值计算程序问题中的操作对象以及它们之间的关系。
数据 – 程序的操作对象,用于描述客观事物。
数据的特点:。1.可以输入到计算机;2.可以被计算机程序处理。
数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型。如:int,float,char等等。
数据对象 – 性质相同的数据元素的集合。
数据元素 – 组成数据的基本单位。
数据项:一个数据元素由若干数据项组成。
数据元素之间不是独立的,存在特定的关系,这些关系即结构。
数据结构指数据对象中数据元素之间的关系。如:数组中各个元素之间存在固定的线性关系。
编写一个“好”的程序之前,必须分析待处理问题中各个对象的特性,以及对象之间的关系。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
按照视点的不同,数据结构可以分为逻辑结构和物理结构。
集合结构:数据元素之间没有特别的关系,仅同属相同集合。
线性结构:数据元素之间是一对一的关系。
树形结构:数据元素之间存在一对多的层次关系。
图形结构:数据元素之间是多对多的关系。
物理结构:逻辑结构在计算机中的存储形式。
顺序存储结构:将数据存储在地址连续的存储单元里。
链式存储结构:将数据存储在任意的存储单元里,通过保存地址的方式找到相关联的数据元素。
算法-->程序的灵魂
程序 =数据结构 + 算法
程序并不是越短越好,也不是别人看不懂就证明自己很厉害。
数据结构只是静态的描述了数据元素之间的关系。
高效的程序需要在数据结构的基础上设计和选择算法。
算法的定义:
算法是特定问题求解步骤的描述,在计算机中表现为指令的有限序列。
算法是独立存在的一种解决问题的方法和思想。
对于算法而言,语言并不重要,重要的是思想。
算法的特性:
输入:算法具有0个或多个输入。
输出:算法至少有1个或多个输出。
有穷性:算法在有限的步骤之后会自动结束而不会无限循环。
确定性:算法中的每一步都有确定的含义,不会出现二义性。
可行性:算法的每一步都是可行的。
算法设计的准则
正确性
1.算法对于合法数据能够得到满足要求的结果。
2.算法能够处理非法输入,并得到合理的结果。
3.算法对于边界数据和压力数据都能得到满足要求的结果。
注意:正确性是算法最需要满足的基本的准则,但是作为计算机程序,不可能无限制的满足这条准则。
可读性:算法要方便阅读,理解和交流。
健壮性:算法不应该产生莫名其妙的结果。
高性价比:利用最少的时间和资源得到满足要求的结果。
注意:算法可读性是最容易被忽视的,然而,程序是写给人看的,而不是计算机。
算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体,数据结构与算法相辅相成。
审判程序的灵魂-->算法的优劣
算法效率的度量
1.事后统计法:比较不同算法对同一组输入数据的运行处理时间。
缺陷
1.1.为了获得不同算法的运行时间必须编写相应程序;
1.2.运行时间严重依赖硬件以及运行时的环境因素;
1.3.算法的测试数据的选取相当困难。
事后统计法虽然直观,但是实施困难且缺陷多,一般不予考虑。
2.事前分析估算:依据统计的方法对算法效率进行估算。
影响算法效率的主要因素
2.1.算法采用的策略和方法;
2.2.问题的输入规模;
2.3.编译器所产生的代码;
2.4.计算机执行速度。
算法的时间复杂度-->执行时间
算法效率的简单估算
1
2
3
三种求和算法中求和的关键部分的操作数量分别为2n, n和1。
随着问题规模n的增大,它们操作数量的差异会越来越大,因此实际算法在时间效率上的差异也会变得非常明显。
判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略。
大O表示法
1.算法效率严重依赖于操作(Operation)数量;
2.在判断时首先关注操作数量的最高次项;
3.操作数量的估算可以作为时间复杂度的估算。
O(5) = O(1)
O(2n + 1) = O(2n) = O(n)
O(n2 + n + 1) = O(n2)
O(3n3+1) = O(3n3) = O(n3)
常见时间复杂度类型
关系:
当算法在最坏情况下仍然能满足需求时,可以推断,算法的最好情况和平均情况都满足需求。在没有特殊说明时,
我们所分析的算法的时间复杂度都是指最坏时间复杂度。
算法的空间复杂度-->内存使用情况
复杂度通过计算算法的存储空间实现,
S(n) = O(f(n))
其中,n为问题规模,f(n)为在问题规模为n时所占用存储空间的函数
大O表示法同样适用于算法的空间复杂度,当算法执行时所需要的空间是常数时,空间复杂度为O(1)。
多数情况下,算法执行时所用的时间更令人关注。如果有必要,可以通过增加空间复杂度来降低时间复杂度。同理,也可以通过
增加时间复杂度来降低空间复杂度。
在实现算法时,需要分析具体问题对执行时间和空间的要求。
数据结构及算法总结(概述)相关推荐
- 数据结构与算法理论概述
数据结构与算法理论概述 文章目录 数据结构与算法理论概述 数据结构概述 ◆ 数据结构涵盖的内容 ◆ 存储数据 算法概述 ◆ 算法的基本特性 ◆ 算法设计要求 ◆ 算法分析 数据结构概述 狭义上:数据结 ...
- 数据结构和算法基础概述
数据结构 我是一个"栈" 计算机世界中存储和组织数据的 下面来介绍四种不同的数据存储方式 数组 存储方式:按顺序存储在连续的内存中 获取方式:只需要提供位置索引 注意事项:只能保存 ...
- 数据结构和算法 数论 概述
1.数论概述 算法导论说:"数论曾经被视为一种虽然优美但却没什么用处的纯数学学科.如今,数论算法已经得到了广泛的使用.这很大程度上要归功于人们发明了基于大素数的加密方法.快速计算大素数的算法 ...
- 程序员的进阶课-架构师之路(1)-数据结构与算法简介
现在市面上的数据结构与算法的教程也都不少,但有两个问题,第一是泛泛而谈,第二是基本都是c语言实现,而java作为第一主流语言,理应有它自己的独到之处.这也是我写这些博客的初衷,我会讲解java实现的数 ...
- 数据结构和算法(Java),上
文章目录 第1章 数据结构和算法的概述 数据结构和算法的关系 线性结构和非线性结构 线性结构 非线性结构 第2章 稀疏数组和队列 稀疏数组 案例引入 稀疏数组的基本介绍 应用实例 队列 队列介绍 数组 ...
- 【尚硅谷|韩顺平】数据结构和算法
文章目录 前言: 数据结构和算法 数据结构和算法的概述 数据结构和和算法的关系 数据结构 线性结构和非线性结构 非线性结构 稀疏 sparsearray 数组 基本介绍: 稀疏数组的处理方法是: 应用 ...
- 拿命 3 天肝出来的计算机考研数据结构与算法复习笔记(超详细教程,更新中)
数据结构与算法 基本概述 数据结构指的是"一组数据的存储结构",算法指的是"操作数据的一组方法". 数据结构是为算法服务的,算法是要作用再特定的数据结构上的. ...
- 猎豹网校JAVA语言数据结构与算法视教程
-------------------课程目录------------------- 01.NetBeans_下载和安装.mp4 02.JavaDS_数据结构和算法的概述.mp4 03.JavaD ...
- 猎豹怎么运行java_猎豹网校 数据结构与算法 Java语言 JAVA语言视频教程(火评)...
01.NetBeans_下载和安装.mp4 02.JavaDS_数据结构和算法的概述.mp4 03.JavaDS_数组基础知识.mp4 04.JavaDS_有序数组和二分查找.mp4 05.Java ...
- java算法概述,Java数据结构与算法基础(一)概述与线性结构
Java数据结构与算法基础(二)递归算法 Java数据结构与算法基础(一)概述与线性结构 学习目的:为了能更顺畅的读很多底层API代码和拓宽解决问题的思路 一.数据结构概述 1.数据结构是什么?数据与 ...
最新文章
- 一切为了AI!黄仁勋GTC大会发布全新DPU处理器,计算吞吐量三年跨越1000倍
- myeclipse乱码
- java对mysql排序_MySQL 排序
- 一款标注颜色,距离的小软件 markman
- C++ 对象的内 存布局(下)
- 《The Pomodoro Technique》
- MacOS安装过程需要注意的几个问题
- java九种数据类型以及封装类
- 查看linux端口对应的进程id
- JCreator 写applet
- 怎么看R语言是不是在运行_生信技能树R语言视频课听后感 (10万+的播放量就看这个春节)...
- PDF阅读器背景设置为护眼豆沙色(福昕)
- 荣誉背后的故事:达内到底有多强?
- 北京邮电大学计算机学院合并,北京邮电大学院系重组
- 如何加声调口诀_汉语拼音声调标注口诀
- 【搞个事】主页被劫持,改注册表进行修复
- Android7.0(Android N)适配教程,心得
- ubuntu快速保存网页图片
- 架设局域网升级服务器 用WSUS打补丁
- 哪些公司有计算机财务管理,计算机财务管理汇总.doc
热门文章
- 二级考试c语言100题,国家计算机二级考试 C语言上机100题
- java守护线程与用户线程_详解Java线程-守护线程与用户线程
- Python捕获 Warning 警告
- 简述python常用的函数模块_Python学习笔记(十三)—函数常用模块
- mysql5.7空间运算_msyql5.7数据类型和运算符
- luogu P5338 [TJOI2019]甲苯先生的滚榜
- This blog has been cancelled for a long time
- 插入排序(边输边排)
- dijkstra 最短路算法
- Git submodule 特性