您的位置:首页 > 理论基础 > 计算机网络

B-树、后缀数组、网络流算法、问题规约、不可解性

2016-12-15 11:54 393 查看
一、B-树:

1、内部结点:含有与页相关联的键的副本

外部结点:含有指向实际数据的引用

2、一棵M阶B-树(M为正偶数)或者仅是一个外部K-结点或者由若干内部K-结点组成。它的结构性质如下:从根节点到每个外部结点的路径长度均相同;对于根结点,k在2到M-1之间,对于其他结点k在M/2到M-1之间。

3、含有N个元素的M阶B-树中的一次查找或插入操作需要logmM~logm/2N次探查------在实际情况下这基本是一个常数。

4、

public class BTreeSET<Key extends Comparable<Key>>
{
private Page root = new Page(true);

public BTreeSET(Key sentinel)
{
add(sentinel);
}

public boolean contains(Key key)
{return contains(root, key);}
public boolean contains(Page h, Key key)
{
if (h.isExternal()) return h.containts(key);
return contains(h.next(key), key);
}

public void add(Key key)
{
add(root, key);
if (root.isFull())
{
Page lefthalf = root;
Page righthalf = root.split();
root = new Page(false);
root.add(lefthalf);
root.add(righthalf);
}
}

public void add(Page h, Key key)
{
if (h.isExternal()) {h.add(key); return;}
Page next = h.next(key);
add(next, key);
if (next.isFull())
h.add(next.split());
next.close();
}
}
二、后缀数组:

问题:

最长重复子字符串?

最长公共前缀?

1、使用三向字符串快速排序,构造长度为N的随机字符串的后缀数组,平均所需的空间与N成正比,字符比较次数与~2NlnN成正比。

2、后缀数组(初级实现)

public class SuffixArray
{
private final String[] suffixes;
private final int N;

public SuffixArray(String s)
{
N = s.length();
suffixes = new String
;
for (int i = 0; i < N; i++)
suffixes[i] = s.substring(i);
Quick3way.sort(suffixes);
}
public int length() {return N;}
public String select(int i) {return suffixes[i];}
public int index(int i) {return N-suffixes[i].length();}
private static int lcp(String s, String t)
{}
public int lcp(int i)
{return lcp(suffixes[i], suffixes[i-1]);}
public int rank(String key)
{
int lo = 0, hi = N - 1;
while(lo <= hi)
{
int mid = lo + (hi - lo) / 2;
int cmp = key.compareTo(suffixes[mid]);
if (cmp < 0) hi = mid -1;
else if (cmp > 0) lo =
4000
mid + 1;
ele return mid;
}
return lo;
}
}
3、使用后缀数组,我们可以在线性时间内解决后缀排序和最长重复子字符串问题。

三、网络流算法:

1、定义:一个流量网络是一张边的权重为正的加权有向图,一个st-流量网络有两个已知的顶点,即起点s和终点t。

2、定义;st-流量网络中的st-流量配置是一组和每条边相关联的值组成的集合,这个值被称为边的流量。如果所有边的流量均小于边的容量且满足每个顶点的局部平衡,那么就称这种流量配置方案是可行的。

3、最大st-流量:给定一个st-流量网络,找到一种st-流量配置,使得s到t的流量最大化。

 4、Ford-Fulkerson算法最大流量算法:增广路径算法:网络中的初始流量为零,沿着任意从起点到终点(且不含有饱和的正向边或空的逆向边)的增广路径增大流量,直到网络中不存在这样的路径为止。

5、st-切分是一个将顶点s和顶点t分配于不同集合中的切分。

6、最小st-切分。给定一个st-网络,找到容量最小的st-切分。---最小切分问题。

7、对于任意st-流量网络,每种st-切分中的跨切分流量都和总流量的值相等。

8、(最大流量-最小切分定理)令f为一个st-流量网络,以下三种条件是等价的:

存在某个st-切分,其容量和f的流量相等

f达到了最大流量

f中已经不存在任何增广路径

9、给定某个st-流量网络和其st-流量配置,这种配置下的剩余网络中的顶点和原网络相同。原网络中的每条边都对应着剩余网络中的1~2条边。它的定义如下:对于原网络中的每条从顶点v到w的边e,令fe表示它的流量,ce表示它的容量。如果fe为正,将边w->v加入剩余网络且容量为fe;如果fe小于ce,将边v->w加入剩余网络且容量为ce-fe.

10、增广路径的查找等价于剩余网络中的广度优先搜索。

public class FordFulkerson
{
private boolean[] marked;
private FlowEdge[] edgeTo;
private double value;
public FordFulkerson(FlowNetwork G, int s , int t)
{
while (hasAugmentingPath(G, s, t))
{
double bottle = Double.POSITIVE_INFINITY;
for (int v = t; v != s; v = edgeTo[v].other(v))
bottle = Math.min(bottle, edgeTo[v].residualCapacityTo(v));
for (int v = t; v != s; v = edgeTo[v].other(v))
edgeTo[v].addResidualFlowTo(v, bottle);

value += bottle;
}
}
public double value() {return value;}
public boolean inCut(int v) {return marked[v];}

public static void main(String[] args)
{
FlowNetwork G = new FlowNetwork(new In(args[0]));
int s = 0; t = G.V() - 1;
FordFulkerson maxflow = new FordFulkerson(G, s, t);

StdOut.println("Max flow from" + s + "to" + t);
for (int v = 0; v < G.V(); v++)
for (FlowEdge e : G.adj(v))
if ((v == e.from()) && e.flow() > 0)
StdOut.println(" " + e);
StdOut.println("Max flow value = " + maxflow.value());
}
}
四、问题规约
1、以下问题可以被归约为排序问题:

寻找中位数

统计不同的值

最小平均完成时间的调度问题

2、问题解决模型 但注意Maslow锤子问题

3、最短路径问题归约:

非负权重无向图中的单点最短路径问题

优先级限制下的并行任务调度问题

套汇

4、可归约为最大流量问题:

就业安置

产品配送

网络可靠性

其他许多问题

5、可归约为线性规划问题:

最大流量问题

最短路径问题

许多许多其他问题

6、我们一般认为指数时间的算法无法保证在合理的时间内解决规模超过100的问题。

7、如果一个问题有解且验证它的解的正确性所需的时间不会超过输入规模的多项式,则称这种问题为搜索问题,当一个算法给出了一个解或是已证明解不存在时,就称它解决了一个搜索问题。

8、NP是所有搜索问题的集合。

9、部分搜索问题:

线性等式可满足性

线性不等式可满足性

0~1整数线性不等式可满足性

布尔可满足性

10、P是能够在多项式时间内解决的所有搜索问题的集合。

11、NP中的N表示非确定性。

12、布尔可满足性问题能够在多项式时间内规约为0-1整数线性不等式可满足性问题

13、如果可满足性问题是难以解决的,那么整数线性规划问题也是难以解决的。

14、若NP中的所有问题都能在多项式时间内规约为搜索问题A,那么则称问题A是NP-完全的。

15、布尔可满足性问题是NP-完全的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法第四版