数据结构与算法

线性结构

堆栈

队列

前序遍历

中序遍历

后序遍历

二叉树

图的遍历

深度优先搜索(DFS)

DFS是一个针对图和树的遍历算法。早在19世纪就被用于解决迷宫问题。
DFS使用 堆栈(stack) 进行递归实现。具体步骤如下:

  1. 把起始点放入stack;
  2. 重复下述3个步骤,直到stack为空为止:
  • 从stack中访问栈顶的点;
  • 找出与此点邻接的且尚未遍历的点,进行标记,然后全部放入stack中;
  • 如果此点没有尚未遍历的邻接点,则将此点从stack中弹出。
    遍历过程演示

基本模板:

void DFS(Vectex V){
	visited[V]=1;  //标记已访问
	for(V的每个邻接点W){
		if(!visited[W])  //如果未被访问
			DFS(W);
	}
}

若有N个顶点,E条边,时间复杂度是:

  • 用邻接表存储图 T = O ( N + E ) T=O(N+E) T=O(N+E)
  • 用邻接矩阵存储图 T = O ( N 2 ) T=O(N^2) T=O(N2)

优点:

  1. 能找出所有解决方案;
  2. 优先搜索一棵子树,然后是另一棵,所以和BFS对比,有着内存需要;
  3. 解决连通性问题更自然。

缺点:

  1. 要多次遍历,搜索所有可能路径,标识做了之后还要取消;
  2. 在深度很大的情况下效率不高。

实例:

宽度优先搜索(BFS)

排序

1 冒泡排序

2 插入排序

3 希尔排序

4 堆排序

5 归并排序

6 快速排序

7 表排序

8 基数排序

排序算法的比较

散列查找

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值