算法与数据结构
经典算法与数据结构记录。
feng_zhiyu
这个作者很懒,什么都没留下…
展开
-
【Python版】二叉树的遍历
前序遍历和中序遍历树构造二叉树 """Definition of TreeNode:""" class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None class Solution: """ @...原创 2018-09-14 18:15:23 · 286 阅读 · 0 评论 -
【Python版】排序与搜索
1、搜索1)顺序搜索 复杂度O(n) 无序列表的顺序搜索:# -*- codind: utf-8 -*-def sequentialSearch(alist, item): pos = 0 found = False while pos < len(alist) and not found: if alist[pos] == item:...原创 2018-06-29 19:26:24 · 428 阅读 · 0 评论 -
【Python版】基本数据结构类型
1、栈(后进先出,LIFO)一个栈 (有时称“叠加栈”)是一个项的有序集合。添加项和移除项都发生在同一“端”。 这一端通常被称为“顶”。另一端的顶部被称为“底”。栈的抽象数据类型 栈的抽象数据类型是由以下结构和操作定义的。堆栈是结构化的,如上面所描述的,栈是一个有序的项的集,项添加和删除的一端称为“顶”。栈的命令是按后进先出进行的。栈的操作如下:Stack()创建一个新的空栈。它不...原创 2018-06-29 18:01:20 · 768 阅读 · 0 评论 -
数据结构——线段树
http://blog.csdn.net/metalseed/article/details/8039326(更新中.....)一:线段树基本概念1:概述线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(lgN)!性质:父转载 2017-06-17 12:28:31 · 515 阅读 · 0 评论 -
归并排序
归并排序步骤: 1.划分子问题 2.递归求解 3.合并分治法分一种 时间复杂度:O(nlogn) 比快速排序更稳定 缺点:1.用到辅助空间,空间消耗更大 2.需要复制回原数组#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+5;in原创 2017-08-14 10:15:01 · 319 阅读 · 0 评论 -
强连通算法--Tarjan算法
转自:这里写链接内容首先我们引入定义:1、有向图G中,以顶点v为起点的弧的数目称为v的出度,记做deg+(v);以顶点v为终点的弧的数目称为v的入度,记做deg-(v)。2、如果在有向图G中,有一条<u,v>有向道路,则v称为u可达的,或者说,从u可达v。3、如果有向图G的任意两个顶点都互相可达,则称图 G是强连通图,如果有向图G存在两顶点u和v使得u不能到v,或者v不能到u,则称图G是强非连通图。转载 2017-12-31 14:32:38 · 418 阅读 · 0 评论 -
网络流~最大流算法模板题
Ford-Fulkerson算法 记F为最大流的流量。 通过深度优先搜索寻找增广路,并沿着它增广。 时间复杂度 O(FE) E为边的条数模板题:【hdu 1532】 (Ford-Fulkerson算法和Dinic算法)Ford-Fulkerson算法 模板代码:#include <cstdio>#include <iostream>#includ...原创 2018-02-02 18:53:47 · 885 阅读 · 0 评论 -
Manacher 算法(求字符串的回文子串的最大长度)
原文链接 一:背景 给定一个字符串,求出其最长回文子串。例如: (1):s=”abcd”,最长回文长度为 1; (2):s=”ababa”,最长回文长度为 5; (3):s=”abccb”,最长回文长度为 4,即 bccb。以上问题的传统思路大概是,遍历每一个字符,以该字符为中心向两边查找。其时间复杂度为 ,效率很差。1975 年,一个叫 Manacher 的人发明了一个算法,M...原创 2018-03-21 13:36:50 · 731 阅读 · 1 评论 -
【银行家算法】
先引用一个例子:填表法解“银行家算法”问题银行家算法( banker’s algorithm )由 Dijkstra(1065)提出。他将死锁的问题演示为一个银行家贷款的模型。 一个银行家向一群客户发放信用卡,每个客户有不同的信用额度。每个客户可以提出信用额度内的任意额度的请求,直到额度用完后再一次性还款。银行家承诺每个客户最终都能获得自己需要的额度。 所谓“最终”,是说银行家可以先挂起某...原创 2018-06-26 10:25:18 · 3332 阅读 · 0 评论 -
【C++】实现银行家算法
#include &amp;amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;amp;gt;using namespace std;const int N = 5;///进程数目const int M = 3;///资源类型数目int AllResource[M]= {10,5,7}; ///各类类型资源矩阵int Available[M];///可用的资源向量int Request[M]原创 2018-06-26 18:11:40 · 4690 阅读 · 0 评论