算法与数据结构

简介: 算法与数据结构

大O描述的是算法的运行时间和输入数据之间的关系

O(1), O(n),O(lgn),O(nlogn),O(n^2)

n是nums中的元素个数

 

均摊复杂度和防止复杂度的震荡

栈也是一种线性结构


相比数组,栈对应的操作是数组的子集


只能从一端添加元素,也只能从一端取出元素


这一端称为栈顶


栈是一种后进先出的数据结构


Last in First Out(LIFO)

栈的实现:Stack<E>

void push(E)

E pop()

E peek()

int getSize()

boolean isEmpty()


栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素

import java.util.Stack;

class Solution{

public boolean isValid(String s){

Stack<Character> stack = new Stack<>();

for(int i=0;i<s.length(); i++){

char c = s.charAt(i);

if(c == '(' || c =='[' || c == '{'){

stack.push(c);

}else{

if(stack.isEmpty()){

return false;

}else{

char topChar = stack.pop();

if(c == '(' && topChar != ')'){

return false

}

if(c == '[' && topChar != ']'){

return false

}

if(c == '{' && topChar != '}'){

return false

}


}


}

}


}

return stack.isEmpty();

}

队列 QUEUE

队列也是一种线性结构

相比数组,队列对应的操作是数组的子集

只能从一端(队尾)添加元素,只能从另一端(队首)取出元素

队列是一种先进先出的数据结构


First in First out


FIFO


队列的实现

Queue<E>

void enqueue()

E dequeue()

E getFront()

int getSize()

boolean isEmpty()


循环队列





什么是链表


线性数据结构



动态数组



队列

--------底层依托静态数组;靠resize解决固定容量问题


链表linkedList

public E e;

public Node nextElement;


数据存储在节点(Node)中

优点:真正的动态,不需要处理固定容量的问题

缺点:丧失了随机访问的能力


数组和链表的对比:

数组最好用于索引有语意的情况。array[2]

最大的优点:支持快速查询


链表不适合用于索引有语意的情况。

最大的优点:动态



程序调用的系统栈

递归调用时有代价的:函数调用+系统栈空间




二叉堆是一棵完全二叉树


二叉堆得性质:

堆中某个节点的值总是不大于其父节点



什么是Trie(字典树)--多叉树

每个节点有若干指向下个节点的指针


class Node{

boolean isWord;


Map<char,Node> next;


}


平衡二叉树(AVL树)


对于任意一个节点,左子树和右子树的高度差不能为超过1


平衡二叉树的高度和节点数量之间的关系也是O(logn)的二叉树


平衡因子:左子树的高度减去右子树的高度

左右节点的高度差



AVL树的左旋转和右旋转



加入节点后,沿着节点向上维护平衡性







什么是红黑树


1.每个节点或者是红色的,或者是黑色的

2.根节点是黑色的

3.每一个叶子节点(最后的空节点)是黑色的

4.如果一个节点是红色的,那么他的孩子节点都是黑色的

5.从任意一个节点到叶子节点,经过的黑色节点是一样的



2-3树

满足二分搜索树的基本性质

节点可以存放一个元素或者两个元素

每个节点有2个或3个孩子 ------ 2-3树

2-3树是一颗绝对平衡的树



红黑树和2-3树的等价性


所有的红色节点都是向左倾斜的

三个元素的节点会产生一个红色节点


(二三树中的三节点的左侧(较小的元素)为红节点)

其子节点为黑节点

黑节点的右侧子节点为黑节点


红黑树是保持“黑平衡”的二叉树





















 

标签: 算法与数据结构

目录
相关文章
|
3月前
|
存储 算法
【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)
【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)
26 0
|
20天前
|
机器学习/深度学习 人工智能 算法
【人工智能】线性回归模型:数据结构、算法详解与人工智能应用,附代码实现
线性回归是一种预测性建模技术,它研究的是因变量(目标)和自变量(特征)之间的关系。这种关系可以表示为一个线性方程,其中因变量是自变量的线性组合。
36 2
|
2月前
|
机器学习/深度学习 存储 算法
【数据结构】算法的复杂度
算法的时间复杂度和空间复杂度
48 1
【数据结构】算法的复杂度
|
19天前
|
算法
【初阶数据结构篇】二叉树算法题
二叉树是否对称,即左右子树是否对称.
|
19天前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
|
21天前
|
存储 缓存 算法
深入解析B树:数据结构、存储结构与算法优势
深入解析B树:数据结构、存储结构与算法优势
|
2月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
24 1
|
3月前
|
算法 分布式数据库
【数据结构和算法】--- 二叉树(5)--二叉树OJ题
【数据结构和算法】--- 二叉树(5)--二叉树OJ题
29 1
|
2月前
|
算法 安全 调度
逆天改命!Python高级数据结构堆(Heap)与优先队列,让你的算法效率飙升至宇宙级!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue实现了堆和优先队列,提供高效算法解决方案。堆用于Dijkstra算法求解最短路径,例如在图论问题中;PriorityQueue则在多线程下载管理中确保高优先级任务优先执行。这两个数据结构提升效率,简化代码,是编程中的强大工具。
29 0
|
2月前
|
算法 搜索推荐 Java
在Java中实现高效的算法与数据结构
在Java中实现高效的算法与数据结构
下一篇
DDNS