数据结构与算法- 基础理念

简介: 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,用S(n)=O(f(n))

时间复杂度

  • T(n)=O(f(n))通过模拟的场景来反映算法实际运算时的速度,不同T(n)在不同的状态下表现的速度也不一样,比如算法A为O(100n)与算法B为O(5n*2),当n小时算法B快,当n大时算法A快。这就是时间复杂度带来的差异
  • 常见的时间复杂度O(1)<O(logn)<O(n)<O(nlonn)<O(n*2)

空间复杂度

  • 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,用S(n)=O(f(n))
  • 常见的空间复杂度O(1)<O(n)<o(n*2)

什么是数组

  • 数组是由有限个相同类型的变量所组成的有序集合,数组的物理储存方式是顺序存储,访问方式是随机访问。利用下标查找元素的时间复杂度是O(1),中间插入和删除数组元素的时间复杂度是O(n)。

什么是链表

链表是一钟链式的数据结构,由若干个节点组成,每个节点包含指向下一个节点的指针。链表的物理储存方式是随机存储,访问方式是顺序访问。查找链表的节点时间复杂度是O(n),中间插入和删除节点的时间复杂度是O(1)。

什么是栈

栈是一种线性逻辑结构,可以用数组实现,也可以用链表实现。栈包含入栈和出栈操作,遵循先入后出的原则(FILO)。

什么是队列

队列也是一种线性逻辑结构,可以用数组实现,也可以用链表实现。包含入队和出队操作,遵循先入先出的原则(FIFO)。

什么是散列表

  • 散列表也叫哈希表,是存储Key-Value映射的集合。对于某一个Key,散列表可以在接近O(1)的时间内进行读写操作。散列表通过哈希函数实现Key和数组下标的转换。
  • 解决哈希冲突的2种方法
  1. 开放寻址法:当准备插入的下标下已有值,则通过向右移动来寻找空的值这只是其中一种方法,在Java中有ThreadLocal用的就开放寻址法解决哈希冲突
  2. 链表法:这种方法在HashMap中,当插入的下标中已有值,则通过next指针指向同下标一个新的值,通过这个链表,当查找时,先找到下标再通过一层一层的指针来查找所需所需元素
相关文章
|
Java 程序员
收藏!阿里毕玄16篇文章,深度讲解Java开发、系统设计、职业发展
阿里毕玄结合自己的经历深度讲解Java开发、系统设计、职业发展等问题,快来一键收藏吧。
34552 1
|
6月前
|
存储 机器学习/深度学习 并行计算
数据结构与算法 之三 算法的力量
数据结构与算法 之三 算法的力量
19 0
|
消息中间件 存储 算法
架构师如何高效的学习技术?
架构师如何高效的学习技术?
|
SQL 前端开发 Oracle
PHP开发总监的知识体系是什么?底层原理是什么?
PHP开发总监的知识体系是什么?底层原理是什么?
|
存储 C++
经典的QVariant设计之道
经典的QVariant设计之道
|
架构师 前端开发 程序员
为了成为一名架构师必须稳扎稳打,软件架构设计的基本概念
软件行业的人才结构是金字塔,我们的目标就是向塔尖走去,从程序员到技术经理或者程序员到架构 师,都是我们职业路上所追求的。
|
消息中间件 存储 缓存
架构之美-软件实现分析之道
理解一个实现,是以对模型和接口的理解为前提。 如果想了解一个系统的实现,应从软件结构和关键技术两个方面着手。无论是软件结构,还是关键技术,我们都需要带着自己的问题入手,而问题的出发点就是我们对模型和接口的理解。 了解软件的结构,其实,就是把分层的模型展开,看下一层模型: 要知道这个层次给你提供了怎样的模型 要带着自己的问题去了解这些模型为什么要这么设计 Kafka的实现主要是针对机械硬盘做的优化,现在的SSD硬盘越来越多,成本越来越低,这个立意的出发点已经不像以前那样稳固了。
117 0
架构之美-软件实现分析之道
|
架构师
《架构师进阶系列》开篇:架构师与高级开发工程师的分水岭是啥?
《架构师进阶系列》开篇:架构师与高级开发工程师的分水岭是啥?
467 0
|
存储 分布式计算 大数据
好程序员大数据入门学习之Hadoop技术优缺点
  **好程序员**大数据培训的终极目标是将你培养成一名“复合型”研发人才,让你自己在掌握相关大数据技术的同时,也能够赢得一份高薪职位!好程序员大数据开发采用“T”字形的思维,以大数据的深度为主,以机器学习、云计算等作为宽度,相辅相成。
1632 0