数据结构和算法一(基础知识)

一、数据结构与算法基础知识

  • 从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。
  • 从狭义上讲,就是指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等。
  • 数据结构和算法是相辅相成的,数据结构为算法服务,算法要作用在特定的数据结构之上。
  • 数据结构思维导图
  • 基础数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树
  • 基础算法:地柜、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法

二、时间复杂度和空间复杂度

时间复杂度

1、概念

时间复杂度的全程是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。

2、时间复杂度分析

  • 只关注循环执行次数最多的一段代码 我们在分析一个算法、一段代码的时间复杂度的时候,也只关注循环执行次数对多的那段代码即可
  • 加法法则:总复杂度等于量级最大的那段代码的复杂度 随着数据规模的增长,低阶和常量的量级就可以忽略,所以总的时间复杂度等于量级最大的那段代码的时间复杂度
  • 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

3、几种常见时间复杂度实例分析

  • 常量阶 O(1)
int i = 8;
int j = 6;
int sum = i + 

// 只要代码的执行时间不随n的增大而增长,这样的代码的时间复杂度我们都记作 O(1)
// 或者说,一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,时间复杂度也是O(1)
  • 指数阶 O(2^n)
  • 对数阶 O(logn)
int i = 1;
while (i <= n) {
    i = i * 2;
}
  • 线性对数阶 O(nlogn)
//这个方法循环执行n次,时间复杂度就是O(nlogn)
int i = 1;
while (i <= n) {
    i = i * 2;
}
  • 阶乘阶 O(n!)
  • 线性阶 O(n)
  • 平方阶 O(n^2) 、立方阶 O(n^3).... k次方阶O(n^k)-

空间复杂度

1、概念

空间复杂度全程是渐进空间复杂度,表示算法的存储空间与数据规模之间的增长关系。

2、常见的空间复杂度

  • 常量阶 O(1)
  • 对数阶 O(logn)
  • 线性阶 O(n)
//  只有第三行申请了一个大小为n的int类型的数组,其他的代码都没有占用更多的空间,所以这段代码的空间复杂度是O(n)
void print(int n) {
 int i = 0;
 int[] a = new int[n];
 for (i; i <n; ++i) {
 a[i] = i * i;
 }
 for (i = n-1; i >= 0; --i) {
 print out a[i]
 }
}
  • 线性对数阶O(nlogn)
  • 平方阶 O(n^2) 、立方阶 O(n^3).... k次方阶O(n^k)

三、时间复杂度分析

// n 表示数组 array 的长度
int find(int[] array, int n, int x) {
 int i = 0;
 int pos = -1;
 for (; i < n; ++i) {
    if (array[i] == x) {
    pos = i;
    break;
   }
 }
 return pos;
}

1、最好时间复杂度

在最理想的情况下,执行完这段代码的复杂度。(上面代码中要查找的变量x正好是要数组的第一个元素)

2、最坏时间复杂度

在最糟糕的情况下,执行完这段代码的复杂度。(数组中没有要查找的变量x)

3、平均时间复杂度

最好时间复杂度和最坏时间复杂度都是比较极端的情况,平均时间复杂度表示的是在正常情况下可能的时间复杂度,用代码在所有情况下执行的次数的加权平均值标示

4、均摊时间复杂度

在代码执行的所有复杂度情况中绝大部分是最低级别的复杂度,个别情况是高级别复杂度切发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上,基本上均摊结果就等于低级别复杂度。它属于平均时间复杂度中的一种特殊的平均时间复杂度。

原文地址:https://www.cnblogs.com/jakaBlog/p/11284504.html

时间: 2024-10-02 22:22:34

数据结构和算法一(基础知识)的相关文章

数据结构和算法 &ndash; 2.基础查找算法

1.顺序查找 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 数据结构和算法 { class _2 { public readonly static int[] arrayList = new int[] { 312, 564, 1254, 145, 212, 884, 145, 1212, 4

算法导论&mdash;&mdash;基础知识(1)

算法定义: 描述一个特定的计算过程来实现输入输出关系 ps:通俗的说就是对给定的输入数据进行计算,得到一个正确的输出. 既然是一个过程吗,那么有效率问题,比如我们算1..n的和, 我们可以这样 sum = 1+2+..+n 也可以这样 sum = n(1+n)/2 实际表现为时间复杂度和空间复杂度 数据结构: 存储.组织数据的方式 ps:比如说一个学生,ta有学号.姓名等属性,那么我们可以这样定义一个学生类别 Student { name number }   ps:书中说道的NP问题,贴上一个

1. 数据结构及算法简介

内容:  主要介绍数据结构及算法的基础知识,一些基本的概念和术语,以及算法的定义.算法的特性.算法的时间复杂度和空间复杂度 注:  该系列下的数据结构及算法的代码主要采用C语言的语法,但是因为要使用到C++的一些特性(引用类型和bool类型),代码均将存为cpp源文件! 1. 数据结构:  数据结构是计算机存储.组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率.数据结构往往同高效的检索算法和索引技术有关. 

大数据就是这么任性第一季数据结构和算法(一线经验、权威资料、知识新鲜、实践性强、全程源码)

这门课程是针对大数据工程师和云计算工程师的基础课程,同时也是所有计算机专业人士必须掌握的一门课程. 如果不掌握数据结构和算法,你将难以掌握高效.专业的数据处理手段,更难以从容应对复杂的大数据处理场景. 请思考以下问题: 1.社交网站(如微博.facebook)中,人与人的关系是海量数据,你如何研究和处理此问题? 2.数据库的索引作用是什么?为什么利用哈希.B+树和堆表等数据结构来组织索引? 3.为什么Linux的虚拟内存管理模块,使用红黑树来处理VMA的查找? 4.为什么搜索引擎可以在毫秒级返回

数据结构(一)之基础知识

学习数据结构主要源于以下原因: 在工作中我是用meteor在做项目,前后台都要写,服务端是用的node.之前有和同事做过一个邮箱功能,性能测试时并发量一高就发送失败.我认为处理并发量的问题应该需要数据结构与算法和设计模式这三点来优化.这是往大了说,细说就是工作中,功能每次都是加班超快赶,在多人合作下,如果代码结构与逻辑混乱,后期维护困难,功能不好扩展.由于我们组都是前端人员接下这个项目,对于数据库的设计经验缺乏,才一再出现性能问题,所以我认为学习数据结构与算法尤为重要.本人也是正在学习中,有问题

数据结构与算法是什么

前言:数据结构一般和算法说在一起,称为数据结构与算法.这个知识非常好理解,但是一些老师每天XXX的简直不知所云.所以我就想写这篇简单的教程,知识浅薄,请包涵. 什么是数据结构? 数据结构就是一些有关系的数据的集合,有顺序表,链表,栈,队列,树,图.等这几种结构. 什么是算法? 算法就是解决问题的一种方法,解决一个问题的算法有很多,但总有一个算法比其他的方式好,要么节省时间,要么效率高.例如从1加到100,你当然可以来一个for循环来循环100次.你也可以利用高斯的方法(1+100)*50来计算,

数据结构与算法经典问题解析 Java语言描述pdf

下载地址:网盘下载 内容简介 本书以Java为描述语言,介绍了数据结构与算法的基本知识.书中结合企业界的工程实践提炼教学内容,特别对数据结构中易混淆的问题进行了梳理,对每一个问题提出不同的解决方案.本书是一本优秀的数据结构方面的教材. 目录 译者序 前言 第1章绪论1 1.1变量1 1.2数据类型1 1.3数据结构2 1.4抽象数据类型2 1.5什么是算法3 1.6为什么需要算法分析3 1.7算法分析的目的3 1.8什么是运行时间分析4 1.9如何比较算法4 1.10什么是增长率4 1.11常用

数据结构与算法+Python语言描述pdf

下载地址:网盘下载 本书基于Python语言介绍了数据结构与算法的基本知识,主要内容包括抽象数据类型和Python面向对象程序设计.线性表.字符串.栈和队列.二叉树和树.集合.排序以及算法的基本知识.本书延续问题求解的思路,从解决问题的目标来组织教学内容,注重理论与实践的并用. 下载地址:网盘下载 原文地址:https://www.cnblogs.com/cf3276625841/p/9325994.html

数据结构与算法学习之(介绍)

数据结构与算法介绍 数据结构与算法的重要性 算法是程序的灵魂,优秀的程序可以在海量数据计算时,任然保持高速运算 框架和缓存技术的核心时算法 高薪 数据结构与算法的关系 数据(data)结构(Structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构 程序 = 数据结构 + 算法 数据结构是算法的基础 数据结构包括线性结构与非线性结构 线性结构 线性结构是最常用的数据结构,特点是元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构 线性结构常