数据结构与算法
exmy
Less is more, and more is less.
展开
-
二叉树的遍历
总结二叉树的各种遍历方式原创 2015-11-28 00:39:47 · 475 阅读 · 0 评论 -
已知先序中序序列求后序序列
WAY 1. 由先序和中序遍历序列确定一棵二叉树,再后序遍历得到后序序列。WAY 2. 不创建树,直接由先序中序序列得到后序遍历序列。原创 2016-01-23 14:57:13 · 1366 阅读 · 0 评论 -
已知后序中序序列求先序序列
方法呢,与前一篇一样,建树或者不建树皆可,这里不做过多说明,直接show code。原创 2016-01-24 11:29:05 · 639 阅读 · 0 评论 -
二叉搜索树
一、定义 二叉搜索树,Binary Search Tree,是具有这样一种性质的二叉树:对于树中的每个结点X,它的左子树中所有项的值小于X中的项,它的右子树中所有项的值大于X中的项。 此性质意味着只要中序遍历一下便可得到一个有序的序列。原创 2016-01-25 22:23:57 · 530 阅读 · 0 评论 -
单源最短路径之Bellman-Ford 算法
概述单源最短路径是要解决这样一类问题:给定一个图 G=(V,E)G=(V,E),找到从给定源结点 s∈Vs∈V 到每个结点 v∈Vv∈V 的最短路径。其中,从结点uu到结点vv的最短路径权重 δ(u,v)δ(u,v) 定义为:δ(u,v)={min{ω(p):u⇝v},∞,如果存在一条从 u 到 v 的路径其他δ(u,v)={min{ω(p):u⇝v},如果存在一条从 u 到 v原创 2016-02-05 11:22:39 · 703 阅读 · 0 评论 -
位运算(1)-- 基础
一、基础与:a & b 或:a | b 非:~ a 异或:a ^ b 左移:a << b 右移:a >> b二、基本技巧与操作:指定位清零:void clr(int& a, int i) { a &= ~(1 << i); }获取指定位的值:int get(int a, int i) { return a & (1 << i); }保留某些位不变:操作数相应的要保留的位设置位1,如:原创 2016-08-12 21:41:56 · 512 阅读 · 0 评论 -
位运算(2)-- 集合中的位运算
一、基本概念当集合元素个数较少时,可以用二进制来表示。集合{0, 1, ..., n - 1}的子集S可以用如下方法编码成整数: f(S)=∑i∈S2if(S) = \sum_{i \in S}{2 ^ i} 本质就是用每一个二进制位来表示某个元素是否出现。空集 ϕ\phi:0只含有第i个元素的集合{i}:1 << i含有全部n个元素的集合{0, 1, ..., n - 1}:(1 <<原创 2016-08-13 14:24:55 · 1540 阅读 · 0 评论 -
位运算(3)-- 高级运用
注:此文内容来自于对【数据结构与算法之位运算】课程所做的笔记一、二进制中1的个数问题:给定一个无符号整型变量,求其二进制表示中“1”的个数。 相似问题:判断整数A转换成整数B需要的次数。(A ^ B,再求“1”的个数) 分析:很容易想到右移,然后判断奇偶性,复杂度与最左侧的1的位置相关。int oneCount(unsigned int n){ int c = 0; while(原创 2016-08-14 08:53:27 · 1933 阅读 · 1 评论 -
并查集
在计算机科学中,并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构:Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合(维基百科)带路径压缩的 Find:所原创 2016-01-28 15:18:22 · 544 阅读 · 0 评论