ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基础篇—— 数据结构与算法

2022-07-28 13:37:41  阅读:146  来源: 互联网

标签:排序 递归 -- 复杂度 基础 算法 数据结构


一、数据结构

个人理解:数据结构的释义,我觉得重点是在结构上,单纯的数据当然也只是数据,但是,如果按照结构内的规则去构造这些数据,并且根据其结构所衍生的算法对数据进行操作,这些数据就会呈现更多形态。有时候我会考虑,数据结构是通过数据填充结构,还是使用数据构造结构,我想应该是后者,因为每一个结构都可能是根据某种规则无限延伸的,并不能事先建造好供数据填充。
时间复杂度递增:

复杂度 量级
常量阶 O(1)
对数阶 O(logn)
线性阶 O(n)
线性对数阶 O(nlogn)
平方阶 O(n的平方)
k次方阶 O(n的k次方)
指数阶 O(2的n次方)
阶乘阶 O(n!)

二、数据结构-- 算法

1、内容

基本的数据结构和算法有哪些?如下图:
image

10个基本的数据结构和算法包括:

  • 数据结构:数组,链表,栈,队列,散列表,二叉树,堆,跳表,图,Trie树;
  • 算法:递归,排序,二分查找,搜索,哈希算法,贪心算法,分治算法,回溯算法,动态规划,字符串匹配算法。

2、数据结构-- 数组

1、数组具有随机访问的特性,这种特性是由计算机为数组开辟的内存连续性决定的,也正是为了维持这种内存连续性,使得数组的添加删除操作的时间复杂度增加。这种通过内存地址+索引直接进行随机访问的模式,是CPU缓存机制的体现。
2、数组内存地址是一块连续的内存空间:数组内存 = 计算机分配的base_地址 + 索引i * 数据所占内存。
3、数组越界问题,在C语言中需要开发者维护,java中由JVM维护。

3、数据结构-- 链表

1、链表所申请的内存空间不一定是连续的,可以是分散的。
2、链表也可以是有序的,每个结点存储下个结点的指针来串联链表分散的结点。

4、数据结构-- 栈

1、栈结构的特性是先进后出,函数调用时创建的临时变量就是存储在栈中。
2、函数调用中,如果有子函数,出栈顺序先进后出,能够安全的先出栈子函数变量。
3、栈结构很容易出现在对称场景中。

5、数据结构-- 队列

1、队列的先进先出的特性,多用于资源受限的池化等场景。

6、算法-- 递归

1、当一个问题可以分解成相同思路的单个或多个子问题时,可以考虑使用递归算法;根据思路写出递推公式,然后确定递出去的终止结果,反推到当前问题。
2、递归代码要重点考虑堆栈内存溢出和重复计算问题。
3、通过栈内存结构实现递归,空间复杂度高。所以一般递归都可以使用非递归实现。

7、算法-- 排序

1、常用排序算法:冒泡排序,插入排序,选择排序,归并排序,快速排序,计数排序,基数排序,桶排序。
2、核心思想:

  • 冒泡排序:比较交换,稳定排序,时间复杂度O(n^2)
  • 插入排序:比较插入,稳定排序,时间复杂度O(n^2)
  • 选择排序:比较交换,不稳定排序,时间复杂度O(n^2)
  • 归并排序:递归分治,稳定排序,时间复杂度O(nlogn)
  • 快速排序:递归分治,不稳定排序,时间复杂度O(nlogn)
数据结构 衍生算法 结构特性
数组 1、二分查找法 1、具有随机访问的特点

标签:排序,递归,--,复杂度,基础,算法,数据结构
来源: https://www.cnblogs.com/zzb-yp/p/16501567.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有