算法合集之《浅析差分约束系统》

算法合集之《浅析差分约束系统》
算法合集之《浅析差分约束系统》

数与图的完美结合

-------浅析差分约束系统

华中师大一附中冯威

[摘要]

在面对多种多样的问题时,我们经常会碰到这样的情况:往往我们能够根据题目题面意思来建立一些简单的模型,但却面对这些模型无从下手。这时我们应该意识到,也许能够将这种模型与其他的模型之间搭起一座桥梁,使我们能够用更简单直接的方式解决它。这里我们介绍一种方法,它很好地将某些特殊的不等式组与图相联结,让复杂的问题简单化,将难处理的问题用我们所熟知的方法去解决,它便是差分约束系统。这里我们着重介绍差分约束系统的原理和其需要掌握的bellman-ford算法。然后通过zju1508和zju1420两道题目解析差分约束系统在信息学题目中的应用,并逐渐归纳解决这类问题的思考方向。

[目录]

◆关键字 (2)

◆Bellman-ford算法 (2)

◇算法简单介绍 (2)

◇算法具体流程 (2)

◇例题一ZJU2008 (4)

◆差分约束系统 (5)

◇例题二ZJU1508 (5)

◇线性程序设计 (7)

◇差分约束系统 (7)

◇例题三ZJU1420 (8)

◆结语 (9)

◆附录 (9)

[关键字] 差分约束系统、不等式、单元最短路径、转化

[正文]

在分析差分约束系统之前,我们首先介绍一个解决单元最短路径问题的Bellman Ford算法,它的应用十分广泛,在差分约束系统中更充当着重要的角色。

Bellman-ford 算法

算法简单介绍

这个算法能在更一般的情况下解决最短路的问题。何谓一般,一般在该算法下边的权值可以为负,可以运用该算法求有向图的单元最长路径或者最短路径。我们这里仅以最短路径为例。

Bellman ford 类似于Dijkstra算法,对每一个节点v∈V,逐步减小从起点s到终点v最短路的估计量dist[v]直到其达到真正的最短路径值mindist[v]。Bellman-ford算法同时返回一个布尔值,如果不存在从源结点可达的负权回路,算法返回布尔值TRUE,反之返回FALSE。

算法具体流程

1.枚举每条边(u,v)∈E(G)。

2.对枚举到的边进行一次更新操作。

3.回到步骤1,此过程重复n-1次,以确定没有更可以优化的情况。

4.枚举每条边(u,v)若仍然存在可以更新的边,则说明有向图中出现了负权回路,于是返回布尔值FALSE。

5.返回布尔值TRUE。

注:这里的更新操作是一种松弛技术,以单元最短路径为例这个操作就是保证

dist[v]<=dist[u]+w[u,v],即if dist[v]>dist[u]+w[u,v] then dist[v]=dist[u]+w[u,v],如果是最长路径则是保证dist[v]>=dist[u]+w[u,v]。

定义一个有向图G=(V,E),w(u,v)表示由结点u到v的边的权值。

伪代码如下:

For i=1 to |V|G||-1

Do for 每条边(u,v)∈E|G|

Do 更新操作(u,v,w(u,v))

For 每条边(u,v)∈E|G|

Do if 仍然有可更新内容then return False

Return True

下图描述了该算法的操作过程,粗线条代表已更新线段

图例中,S 为源节点,粗线断覆盖的边表示最近一次执行更新操作的边。算法执行|V|-1次操作,每次操作都对所有可以进行松弛操作的边进行扩展。

证明一下Bellman-Ford 算法的正确性。

1.设G=(V ,E )为有向加权图,源节点为S ,加权函数为w :E-〉R 。如果有负权回路则Bellman_ford 算法一定会返回布尔值false,否则返回TRUE 。

证明略。

2.设G=(V ,E )为有向加权图,

源节点为S 加权函数为w :E-〉R ,并且G 不含从s 可达的负权回路,则算法Bellman_ford

终止时,对所有从s 可达的结点v 有d[v]=mindist (s ,v )。

证明:设v 为从s 可达的节点,且p=为从s 到v 的一条最短路径,其中v0=s ,vk=v 。因为路径p 是简单路径,所以k<=|V|-1。我们希望通过归纳证明对i=0,1,…,k ,在对G 的边进行完第i 趟操作后有d[vi]=mindist(s,vi),且该等式此后一直保持成立,因为总共有|V|-1次操作,所以上述结论证明命题成立。

MAX

MAX

MAX

MAX 0 6 7 8

5

-2 -4 -3 7 9 2

S T

6

4 7 2

6

7

8

5 -2

-4

-3 7

9

2

S

T

6

MAX

7

MAX 0 6

7

8 5

-2

-4

-3

7 9

2 S T 2

4

7

2

6

7

8 5

-2

-4

-3

7

9

2

S

T

2

4

7

-2

6

7

8 5

-2

-4 -3

7 9

2 S

T

我们发现与Dijkstra不同,Bellman ford更多的是对边进行操作,在稀疏图,即点多边少的图中,用Bellman Ford更能高效的解决单元最短路径问题。下面一道例题来进一步熟悉Bellman Ford并与Dijkstra作一下简单的时间上的比较。

例题一:ZJU2008 Invitation Cards

[题目大意]在有向加权图中G(V,E),邮局要从起点S向其他n个节点发送邮件,于是派出n个邮递员,分别到达其他n个地点发送,然后回到起点S,求出所有邮递员所经过的总路程的最小值。

[数据范围] 1 <= P,Q <= 1000000。P表示节点数目,Q表示边的个数。

[题目分析]这道题算法很简单,即求出从s到任意点的最短路径,求其和ANS1,再将所有有向边反向(这个过程将求从另外n个结点到s的最短路径转化为从s到其他n个点的最短路径),再求一次s到任意点的最短路径,求其和ANS2,Ans=Ans1+Ans2即为所求。

V) 的算法,还是Bellmanford的O(VE)但是,此题难在数据量上,无论是Dijkstra的O(2

的算法都无法在数据规模最大的情况下在5s的时间内得出结果,于是需要做出一点优化。

关于Dijkstra的优化:用堆维护使寻找需要扩展的点的过程复杂度降低为1。复杂度大幅降低。

关于Bellman ford的优化:可以将Bellman ford需要扩展的点放进队列中,扩展顺序有了新的变化。用一个队列queue表示需要更新的点,每次取队列头指针fp所指的点u,搜索所有的边(u,v)属于E,如果dist[u]+w[u,v] 比dist[v]更优则更新dist[v],尾指针rp后挪一位,将v点加入队列queue。这样的优化避免了很多重复的操作,事实证明它的效率仅次于Dijkstra+heap的效率。下面用3种不同的方法来解这道题目,看看结果如何。

我们用以下三种方法求最短路径:

1.Dijkstra

2.Bellman Ford

3.Dijkstra&Heap

在ZJU Online Judge中进行评测结果如下:

算法运行所有数据所用时间

Dijkstra 〉5s (TLE)

Bellman Ford 1.46s

Dijkstra&Heap 1.24s

差分约束系统

对于解决差分约束系统问题的操作过程和使用原理,我们通过下面一道简单的题目进行了解。

引例:[例题二] Zju1508 Interval

题目大意:

有一个序列,题目用n 个整数组合 [ai,bi,ci]来描述它,[ai ,bi ,ci]表示在该序列中处于[ai ,bi]这个区间的整数至少有ci 个。如果存在这样的序列,请求出满足题目要求的最短的序列长度是多少。如果不存在则输出 -1。

输入:第一行包括一个整数n ,表示区间个数,以下n 行每行描述这些区间,第i+1行三个整数ai ,bi ,ci ,由空格隔开,其中0<=ai<=bi<=50000 而且 1<=ci<=bi-ai+1。

输出:一行,输出满足要求的序列的长度的最小值。

[浅析]初看此题感觉无从下手,我们将范围和个数进行量化,让问题看起来更加简单些。

将问题数字化:

若记,不存在于序列中

如果存在于序列之中

如果i 0i 1{t i =

那么本题约束条件即为n)1,2,...,(i c t i b a j j i

i =≥∑=

建立不等式模型:

这样的描述使一个约束条件所牵涉的变量太多,不妨设∑==i

1

j j

i t

S (i=1,2,…,n)

约束条件即可用以下不等式表示:

)

n ,...,2,1i (c S S i 1a b i i =≥--

值得注意的是,这样定义的S 若仅仅满足约束条件的要求是不能完整体现它的意义的,S 中的各个组成之间并不是相对独立的,他们存在着联系。

由于∑==

i

1

j j

i t

S ,且t 要么为1,要么为0,则i S 一定比1-i S 大 ,且至多大1。于是有:

)n ,...,2,1i (1S S )n ,...,2,1i (0S S i 1-i 1i i =-≥-=≥--

那么如何找到满足要求的这样一组S ,且使其个数最少呢?

这里我们看到最少就会联想到贪心,确实这道题目用贪心可行,且不失为一种很好的做法,但在这里我们不作多的介绍。我们将针对这个不等式组进行联想,迁移。注意到不等式中只涉及到了2个未知数,用减号相连接。这样的式子是否与过去曾经学过的Bellmanford 中的松弛操作所达到的效果相类似呢?

联想:

我们需要寻找一个满足以下要求的S 数组

)

n ,...,2,1i (1S S )n ,...,2,1i (0S S )n ,...,2,1i (c S S i 1-i 1i i i 1a b i i =-≥-=≥-=≥---

而Bellman-Ford 每次的更新操作为

v]w[u,d[u]d[v] then d[v]v]w[u,d[u] If +←≤+

即在经过若干次更新操作将要保证 d[v]<=d[u]+w[u,v]

这里我们也有一个已知量-----边的权值,即w[u,v],于是整理一下得

d[u]-d[v]>=w[u,v]

经过这样的变形,不难看出,两个式子有着极为惊人的相似! 于是做出如下的转化: 1. 我们将n 10S ,...,S ,S ,看作n+1个点n 10V ,...,V ,V 。

2.

若i S 和j S 之间有着约束关系,例如S i-1-S i >= -1,那么我们从结点1i V - 向结点i

V 连上一条有向边,边的权值为-1。

这样如果我们从0V 出发,求出结点0V 到n V 的最短路径,则n S 为满足要求情况下的最小值。相反如果我们发现在Bellmanford 算法执行的过程中存在有负权回路,则说明不存在满足要求的式子。

于是通过合理地建立数学模型,将不等式图形化,用Bellmanford 作为武器,最终此题得到了圆满的解决!

思考:

本题只要求输出最少的个数,那么能否通过上述方法构造出相应的数列呢?答案是肯定的。其实在Bellmanford 的过程中,我们已经得到了所有结点上S 的值,那么由

1i i i S S T --=求出所有T ,当i T 为1则输出i ,即可输出满足题目要求的序列。

总结:

对于ZJU1508的问题,最终可以化为一类线性不等式定义的线性函数。而这类问题其实是可以转化为单元最短路径问题,从而用刚才所准备到的Bellman Ford 算法来解决它。

线性程序设计:

我们为线性程序设计问题制定一个严格的数学描述:

给定一个m*n 矩阵A ,维向量b 和维向量c ,我们希望找出由n 个元素组成的向量x ,在由Ax<=b 所给出的m 个约束条件下,使目标函数∑-n

1i i i x c 达到最大值。

其实很多问题都可以通过这样一个线性程序设计框架来进行描述。在实际的问题中,也经常要对其进行分析和解决。上述例题使我们对这一类线性程序设计问题提供了一个多项式时间的算法。它将一类特殊的线性不等式与图论紧密联系在了一起。这类特殊的线性不等

式,我们称它为差分约束系统,它是可以用单元最短路径来求解的。

差分约束系统:

差分约束系统是一个线性程序设计中特殊的一种,线性程序设计中矩阵A 的每一行包含一个1和一个-1,A 的所有其他元素均为0。由Ax<=b 给出的约束条件形成m 个差分约

束的集合,其中包含n 个未知单元。每个约束条件均可够成简单的不等式如下:

k i j b x x ≤- (1<=I,j<=n,1<=k<=m )

简单举例:

??

???

?????

??

?

?????????????≤??????????????????????????????????????????--------3-3-1-4511-0 x x x x x 1100010100011000100100101100101000100011543

21

找出未知量54321x ,x ,x ,x ,x ,并且满足以下差分约束条件:

-3

x x -3x x -1x x 4x x 5x x 1x x -1x x 0x x 4535341413525121<=-<=-<=-<=-<=-<=-<=-<=-

需要注意的是,用Bellmanford 求出的具体答案只是众多答案中的一种,答案并不唯一,

但答案之间却也有着联系。这里我们并不对其进行专门的探讨。

了解了差分约束系统的整个过程,下面再看另外一道题目,让我们对差分约束系统的应用能够有更加深刻的认识。

[例题三] zju1420 Cashier Employment 出纳员问题

题目中文翻译:

Tehran的一家每天24小时营业的超市,需要一批出纳员来满足它的需要。超市经理雇佣你来帮他解决他的问题——超市在每天的不同时段需要不同数目的出纳员(例如:午夜时只需一小批,而下午则需要很多)来为顾客提供优质服务。他希望雇佣最少数目的出纳员。

经理已经提供你一天的每一小时需要出纳员的最少数量——R(0), R(1), ..., R(23)。R(0)表示从午夜到上午1:00需要出纳员的最少数目,R(1)表示上午1:00到2:00之间需要的,等等。每一天,这些数据都是相同的。有N人申请这项工作,每个申请者I在每24小时中,从一个特定的时刻开始连续工作恰好8小时,定义tI (0 <= tI <= 23)为上面提到的开始时刻。也就是说,如果第I个申请者被录取,他(她)将从tI 时刻开始连续工作8小时。

你将编写一个程序,输入R(I)(I = 0..23)和tI (I = 1..N),它们都是非负整数,计算为满足上述限制需要雇佣的最少出纳员数目。在每一时刻可以有比对应的R(I)更多的出纳员在工作。

输入

输入文件的第一行为测试点个数(<= 20)。每组测试数据的第一行为24个整数表示R(0),R (1),..., R(23)(R(I)<= 1000)。接下来一行是N,表示申请者数目(0 <= N <= 1000),接下来每行包含一个整数tI (0 <= tI <= 23)。两组测试数据之间没有空行。

输出

对于每个测试点,输出只有一行,包含一个整数,表示需要出纳员的最少数目。如果无解,你应当输出“No Solution”。

样例输入

1

1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

5

23

22

1

10

样例输出

1

我们按刚才所讲到的方法对此题进行处理。

这题很容易想到如下的不等式模型:

设num[ i ]为i时刻能够开始工作的人数,x[ i ]为实际雇佣的人数,那么x[ I ]<=num[ I ]。设r[ i ]为i时刻至少需要工作的人数,于是有如下关系:

x[ I-7 ]+x[ I-6 ]+x[ I-5 ]+x[ I-4 ]+x[ I-3 ]+x[ I-2 ]+x[ I-1 ]+x[ I ]>=r[ I ]

设s[ I ]=x[ 1 ]+x[ 2 ]…+x[ I ],得到

0<=s[ I ]-s[ I-1 ]<=num[ I ],0<=I<=23

s[ I ]-s[ I-8 ]>=r[ I ],8<=I<=23

s[ 23 ]+s[ I ]-s[ I+16 ]>=r[ I ],0<=I<=7

对于以上的几组不等式,我们采用一种非常笨拙的办法处理这一系列的不等式(其实也是让零乱的式子变得更加整齐,易于处理)。首先我们要明白差分约束系统的应用对象(它通常针对多个二项相减的不等式的)于是我们将上面的所有式子都转化成两项未知项在左边,另外的常数项在右边,且中间用>=连接的式子,即:

s[ I ]-s[ I-1 ]>=0 (0<=I<=23)

s[ I-1 ]-s[ I ]>=-num[ I ] (0<=I<=23)

s[ I ]-s[ I-8 ]>=r[ I ] (8<=I<=23)

s[ I ]-s[ I+16 ]>=r[ I ]-s[ 23 ] (0<=I<= 7)

这里出现了小的困难,我们发现以上式子并不是标准的差分约束系统,因为在最后一个式子中出现了三个未知单位。但是注意到其中跟随I变化的只有两个,于是s[23]就变得特殊起来,看来是需要我们单独处理,于是我们把s[ 23 ]当作已知量放在右边。

经过这样的整理,整个图就很容易创建了,将所有形如A-B>=C 的式子我们从节点B 引出一条有向边指向A 边的权值为C (这里注意由于左右确定,式子又是统一的>=的不等式,所以A和B是相对确定的,边是一定是指向A的),图就建成了。

最后枚举所有s[ 23 ]的可能值,对于每一个s[23],我们都进行一次常规差分约束系统问题的求解,判断这种情况是否可行,如果可行求出需要的最优值,记录到Ans中,最后的Ans的值即为所求。

程序见附录。

结语:

对于许多复杂的问题,我们通常选择将不够清晰、难以处理的模型转化为容易理解、易于处理的模型。就像用已知的知识作为工具去探索未知领域一样,联想、发散、转化将成为相当有用的武器。本文选择了差分约束系统这样一个平台,通过介绍差分约束系统的相关知识和其在信息学问题中的应用以小见大,为读者提供一个解题的思路和技巧。

附录:

参考文献:《金牌之路竞赛解题指导—高中计算机》[王建德,周咏基]

《Introduction to Algorithms》[H.Cormen]

例题信息

https://www.360docs.net/doc/c84180497.html,/

https://www.360docs.net/doc/c84180497.html,/show_problem.php?pid=2008

https://www.360docs.net/doc/c84180497.html,/show_problem.php?pid=1508

https://www.360docs.net/doc/c84180497.html,/show_problem.php?pid=1420

例一:ZJU2008

Invitation Cards

Time limit: 5 Seconds Memory limit: 32768K

Total Submit: 70 Accepted Submit: 20

In the age of television, not many people attend theater performances. Antique Comedians of Malidinesia are aware of this fact. They want to propagate theater and, most of all, Antique Comedies. They have printed invitation cards with all the necessary information and with the programme.

A lot of students were hired to distribute these invitations among the people. Each student volunteer has assigned exactly one bus stop and he or she stays there the whole day and gives invitation to people travelling by bus. A special course was taken where students learned how to influence people and what is the difference between influencing and robbery.

The transport system is very special: all lines are unidirectional and connect exactly two stops. Buses leave the originating stop with passangers each half an hour. After reaching the destination stop they return empty to the originating stop, where they wait until the next full half an hour, e.g. X:00 or X:30, where 'X' denotes the hour. The fee for transport between two stops is given by special tables and is payable on the spot. The lines are planned in such a way, that each round trip (i.e.

a journey starting and finishing at the same stop) passes through a Central Checkpoint Stop (CCS) where each passenger has to pass a thorough check including body scan.

All the ACM student members leave the CCS each morning. Each volunteer is to move to one predetermined stop to invite passengers. There are as many volunteers as stops. At the end of the day, all students travel back to CCS. You are to write a computer program that helps ACM to minimize the amount of money to pay every day for the transport of their employees.

Input

The input consists of N cases. The first line of the input contains only positive integer N. Then follow the cases. Each case begins with a line containing exactly two integers P and Q, 1 <= P,Q <= 1000000. P is the number of stops including CCS and Q the number of bus lines. Then there are Q lines, each describing one bus line. Each of the lines contains exactly three numbers - the originating stop, the destination stop and the price. The CCS is designated by number 1. Prices are positive integers the sum of which is smaller than 1000000000. You can also assume it is always possible to get from any stop to any other stop.

Output

For each case, print one line containing the minimum amount of money to be paid each day by ACM for the travel costs of its volunteers.

Sample Input

2

2 2

1 2 13

2 1 33

4 6

1 2 10

2 1 60

1 3 20

3 4 10

2 4 5

4 1 50

Sample Output

46

210

Problem Source: Central Europe 1998

[参考程序]:

const

maxn=1000000;

maxm=1000000;

type

Tedge = record

x,y,long:longint;

end;

waytype = array[1..maxn]of longint;

Tdijkstra = object

h,p:array[1..maxn]of longint;

tot:longint;

procedure work(var f:waytype);

end;

TBellman = object

state:array[1..maxn*2]of longint;

procedure bellman_ford(var f:waytype);

end;

var

index : array[0..maxn]of longint;

edge : array[1..maxm]of Tedge;

BellMan : Tbellman;

// dijkstra : Tdijkstra;

way1,way2 : waytype;

n,m,i,ans,

long,x,y,

o,casen : longint;

procedure qsort(fp,rp:longint);

var i,j:longint;

x,t:Tedge;

begin

i:=fp;j:=rp;x:=edge[(i+j)div 2];

repeat

while (edge[j].x>x.x) do dec(j);

while (edge[i].x

if i<=j then begin

t:=edge[i];edge[i]:=edge[j];edge[j]:=t;

inc(i);dec(j);

end;

until i>j;

if i

if fp

end;

procedure makeindex;

var i,j:longint;

begin

index[0]:=0;j:=1;

for i:=1 to n do begin

while ((j<=m)and(edge[j].x=i))do inc(j);

index[i]:=j-1;

end;

end;

procedure change;

var

i,t : longint;

begin

for i:=1 to m do begin

t:=edge[i].x;edge[i].x:=edge[i].y;edge[i].y:=t;

end;

qsort(1,m);

makeindex;

end;

procedure Tbellman.bellman_ford(var f:waytype);

var fp,rp,temp : longint;

begin

fp:=1;rp:=1;

fillchar(f,sizeof(f),$FF);

qsort(1,m);

state[fp]:=1;f[1]:=0;

while fp<=rp do begin

for i:=index[state[fp]-1]+1 to index[state[fp]] do begin

temp:=f[state[fp]]+edge[i].long;

if (temp

inc(rp);

state[rp]:=edge[i].y;

f[edge[i].y]:=temp;

end;

end;

inc(fp);

end;

end;

procedure Tdijkstra.work(var f:waytype);

var u,v,i,temp:longint;

procedure swap(var x:longint;y:longint);

var t:longint;

begin

p[h[x]]:=y;p[h[y]]:=x;

t:=h[x];h[x]:=h[y];h[y]:=t;

x:=y;

end;

procedure up(x:longint);

begin

while x>1 do

if f[h[x]]

procedure down(x:longint);

var l,r:longint;

begin

while true do begin

l:=x*2;r:=l+1;

if l>tot then exit;

if (l=tot)then if (f[h[l]]

if (f[h[x]]>f[h[l]])and(f[h[l]]

if (f[h[x]]>f[h[r]])then swap(x,r) else exit;

end;

end;

begin

fillchar(f,sizeof(f),$FF);

fillchar(p,sizeof(p),0);

f[1]:=0;tot:=1;h[1]:=1;

while true do begin

if tot=0 then break;

v:=h[1];p[h[1]]:=0;h[1]:=h[tot];p[h[tot]]:=1;

h[tot]:=0;dec(tot);

if tot>1 then down(1);

for i:=index[v-1]+1 to index[v] do begin

temp:=f[v]+edge[i].long;u:=edge[i].y;

if (f[u]>temp)or(f[u]<0) then begin

f[u]:=temp;

if p[u]=0 then begin

inc(tot);

h[tot]:=u;

p[u]:=tot;

up(tot);

end else up(p[u]);

end;

end;

end;

end;

begin

readln(casen);

for o:=1 to casen do begin

readln(n,m);

fillchar(edge,sizeof(edge),0);

for i:=1 to m do

with edge[i] do

readln(x,y,long);

qsort(1,m);makeindex;ans:=0;

bellman.bellman_ford(way1);

// dijkstra.work(way1);

for i:=1 to n do inc(ans,way1[i]);

change;

bellman.bellman_ford(way2);

// dijkstra.work(way2);

for i:=1 to n do inc(ans,way2[i]);

writeln(ans);

end;

end.

例二:ZJU1508

Intervals

Time limit: 10 Seconds Memory limit: 32768K

Total Submit: 150 Accepted Submit: 49

You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn.

Write a program that:

> reads the number of intervals, their endpoints and integers c1, ..., cn from the standard input,

> computes the minimal size of a set Z of integers which has at least ci common elements with interval [ai, bi], for each i = 1, 2, ..., n,

> writes the answer to the standard output.

Input

The first line of the input contains an integer n (1 <= n <= 50 000) - the number of intervals. The following n lines describe the intervals. The i+1-th line of the input contains three integers ai, bi and ci

separated by single spaces and such that 0 <= ai <= bi <= 50 000 and 1 <= ci <= bi - ai + 1.

Process to the end of file.

Output

The output contains exactly one integer equal to the minimal size of set Z sharing at least ci elements with interval [ai, bi], for each i = 1, 2, ..., n.

Sample Input

5

3 7 3

8 10 3

6 8 1

1 3 1

10 11 1

Sample Output

6

Problem Source: Southwestern Europe 2002

[参考程序]:

{$MODE FPC}

{$M 0,1025}

{$R-,Q-,S-,I-}

Program T_1508;

Type

TEdge = Record

s, t, w : LongInt;

End;

Var

edge : Array [ 1..50000 ] Of TEdge;

d : Array [ 0..50000 ] Of LongInt; n, i, a, b, c, max : LongInt;

Procedure Bellman_Ford;

Var

i : LongInt;

flag : Boolean;

Begin

For i := 0 To max Do

d[ i ] := 0;

Repeat

Flag := True;

For i := 1 To n Do

With edge[ i ] Do

If (d[ s ] + w < d[ t ]) Then

Begin

d[ t ] := d[ s ] + w;

Flag := False;

End;

For i := 1 To max Do

If (d[ i-1 ] + 1 < d[ i ]) Then

Begin

d[ i ] := d[ i-1 ] + 1;

Flag := False;

End;

For i := max DownTo 1 Do

If (d[ i ] < d[ i-1 ]) Then

Begin

d[ i-1 ] := d[ i ];

Flag := False;

End;

Until Flag;

End;

Begin

While NOT EOF Do

Begin

Readln(n);

max := 0;

For i := 1 To n Do

Begin

Readln(a, b, c);

If (b > max) Then max := b;

edge[ i ].s := b; edge[ i ].t := a - 1; edge[ i ].w := -c;

End;

Bellman_Ford;

Writeln(d[ max ] - d[ 0 ]);

End;

End.

例三:ZJU1420

Cashier Employment

Time limit: 10 Seconds Memory limit: 32768K

Total Submit: 34 Accepted Submit: 10

A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to fit its need. The supermarket manager has hired you to help him, solve his problem. The problem is that the supermarket needs different number of cashiers at different times of each day (for example, a few cashiers after midnight, and many in the afternoon) to provide good service to its customers, and he wants to hire the least number of cashiers for this job.

The manager has provided you with the least number of cashiers needed for every one-hour slot of the day. This data is given as R(0), R(1), ..., R(23): R(0) represents the least number of cashiers needed from midnight to 1:00 A.M., R(1) shows this number for duration of 1:00 A.M. to 2:00 A.M., and so on. Note that these numbers are the same every day. There are N qualified applicants for this job. Each applicant i works non-stop once each 24 hours in a shift of exactly 8 hours starting from a specified hour, say ti (0 <= ti <= 23), exactly from the start of the hour mentioned. That is, if the ith applicant is hired, he/she will work starting from ti o'clock sharp for 8 hours. Cashiers do not replace one another and work exactly as scheduled, and there are enough cash registers and counters for those who are hired.

You are to write a program to read the R(i) 's for i=0...23 and ti 's for i=1...N that are all, non-negative integer numbers and compute the least number of cashiers needed to be employed to meet the mentioned constraints.

Note that there can be more cashiers than the least number needed for a specific slot.

Input

The first line of input is the number of test cases for this problem (at most 20). Each test case starts with 24 integer numbers representing the R(0), R(1), ..., R(23) in one line (R(i) can be at most 1000). Then there is N, number of applicants in another line (0 <= N <= 1000), after which come N lines each containing one ti (0 <= ti <= 23). There are no blank lines between test cases.

Output

For each test case, the output should be written in one line, which is the least number of cashiers needed.

If there is no solution for the test case, you should write No Solution for that case.

Sample Input

1

1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

5

23

22

1

10

Sample Output

1

Problem Source: Asia 2000, Tehran (Iran)

[参考程序]:

const

maxn=230;

var

g:array[-1..maxn,1..4]of record

n,v:integer;

end;

d,xu,num,a:array[-1..maxn]of integer;

ans:integer;

x,n,casen,o,i:integer;

flag:boolean;

procedure add(a,b,c:integer);

begin

inc(num[a]);

g[a,num[a]].n:=b;

g[a,num[a]].v:=c;

end;

procedure init;

var i:integer;

begin

fillchar(g,sizeof(g),0);

for i:=0 to 23 do begin

if i<=7 then add(i+16,i,xu[i]-ans)

else add(i-8,i,xu[i]);

add(i-1,i,0);

add(i,i-1,-a[i]);

end;

end;

function bellman_ford:boolean;

var i,j,k:integer;

ff:boolean;

begin

bellman_ford:=false;

fillchar(d,sizeof(d),0);

for i:=1 to 23 do begin

ff:=true;

for j:=-1 to 23 do

for k:=1 to num[j] do

if d[j]+g[j,k].v>d[g[j,k].n] then begin

d[g[j,k].n]:=d[j]+g[j,k].v;ff:=false;

最新设计方案范文合集6篇

1 建设物流实训室的必要性 在社会需求的推动下,20xx年起,全国部分学校开始试办“物流管理”等相关专业,为企业培养和输送物流专业人才。这在一定程度上对物流知识和思想的传播起到了很好的作用,也的确培养了一些物流人才。他们在相关的物流岗位上发挥了作用,有效地促进了企业物流运作的变革和进步。 但是,其中反映出的问题也不少,主要体现在以下几个方面: 1.1 偏重理论培训,缺少实践环节 目前在各种认证体系中,基本上以知识性学习为主,只有少量的实际操作环节。 现代物流业很注重实际操作经验,仅有理论知识难以解决企业的实际业务问题,物流培训也必须以此为重要原则,加强实训功能,注重对实际业务的理解和对实际操作技能的掌握,才能培养出符合企业需求的人才。 1.2 教学手段单一,感性认识与理性认识不能有机结合 目前无论是高校的物流学历教育还是职业培训,普遍存在一个问题,就是教学主要以教师分散授课为主,辅以少量甚至没有参观。学员们无法全面系统地了解物流运作的整个过程,除少量悟性较高的学员外,大多数学员的物流知识结构比较凌乱。 1.3 传统实训方式已不能满足学生和企业的需要 学生实训要求在类似企业实际的环境下,并且实训的设备、软件必须是企业实际应用的,或在企业实际应用基础上改造过来。 随着国内教育教学改革的深入,实训方式创新层出不穷,旧有的实训方式尤其是模拟仿真远远不能满足现有教学的需要。 2 物流实训室设计理念 通过实训室对各节点模拟,从而展现货物的入库、仓储、流通加工、配送、出库等第三方物流企业的供应链流程。在此模拟的供应链上,配备一系列模块化的现代物流设施,如:全自动立体仓库、电子标签辅助拣货系统、电子看板,RF手持设备等,它们各自独立,又互为联系,充分体现了传统的物流运行过程通过信息化实现其战略决策系统化,管理现代化和作业自动化这一现代物流的时代特征,从而在学校实训室内营造了一个类似真实的集物资流和信息流于一体的实训教学环境。 3 实训室方案规划设计 物流实训室平面布局 主要组成部分: 全自动立体仓库及自动分拣:立体货架、全自动堆垛机及输送装置等; 普通仓储货架:重型及轻型货架; 电子标签拣货系统:重力式货架、电子标签分拣系统及拣货台等; 打包封装:多种款式的打包设备; 条码及射频系统:RF手持终端、条码打印机及多种条码阅读设备; 管理岗位:物流软件、PC及桌椅。 4 实训系统功能 之所以要在学校实训室条件下,构建一个类似真实的以第三方物流服务单元为核心的供应链仿真系统,其真实目的是想以此为学校进行现代供应链物流运作管理等相关课程的课堂理论教学提供一个有效的辅助教学手段,并为学生掌握各种现代化,自动化的物流设施设备的操作技能,提供一个实实在在的实训平台。 所以从这个意义上说,我们这套实训系统应具有以下教学实训功能: 4.1 了解和学习物流管理的内容和技术 1、仓储管理系统的操作训练

算法分析与设计试卷

《算法分析与设计》试卷(A) (时间90分钟满分100分) 一、填空题(30分,每题2分)。 1.最长公共子序列算法利用的算法是( B )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法2.在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( B ). A.回溯法 B.分支限界法 C.回溯法和分支限界法 D.回溯法求解子集树问题 3.实现最大子段和利用的算法是( B )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法4..广度优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法5.衡量一个算法好坏的标准是( C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 6.Strassen矩阵乘法是利用( A)实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 7. 使用分治法求解不需要满足的条件是( A )。 A 子问题必须是一样的 B 子问题不能够重复 C 子问题的解可以合并 D 原问题和子问题使用相同的方法解 8.用动态规划算法解决最大字段和问题,其时间复杂性为( B ). A.logn B.n C.n2 D.nlogn 9.解决活动安排问题,最好用( B )算法 A.分治 B.贪心 C.动态规划 D.穷举 10.下面哪种函数是回溯法中为避免无效搜索采取的策略( B ) A.递归函数 B.剪枝函数C。随机数函数 D.搜索函数11. 从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( C )之外都是最常见的方式. A.队列式分支限界法 B.优先队列式分支限界法 C.栈式分支限界法 D.FIFO分支限界法 12. .回溯算法和分支限界法的问题的解空间树不会是( D ). A.有序树 B.子集树 C.排列树 D.无序树 13.优先队列式分支限界法选取扩展结点的原则是( C )。 A、先进先出 B、后进先出 C、结点的优先级 D、随机14.下面是贪心算法的基本要素的是( C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解15.回溯法在解空间树T上的搜索方式是( A ). A.深度优先 B.广度优先 C.最小耗费优先 D.活结点优先 二、填空题(20分,每空1分)。 1.算法由若干条指令组成的又穷序列,且满足输入、输出、 确定性和有限性四个特性。 2.分支限界法的两种搜索方式有队列式(FIFO)分支限界法、优先队列式分支限界法,用一个队列来存储结点的表叫活节点表。

算法合集之《左偏树的特点及其应用》

左偏树的特点及其应用 广东省中山市第一中学黄源河 【摘要】 本文较详细地介绍了左偏树的特点以及它的各种操作。 第一部分提出可并堆的概念,指出二叉堆的不足,并引出左偏树。第二部分主要介绍了左偏树的定义和性质。第三部分详细地介绍了左偏树的各种操作,并给出时间复杂度分析。第四部分通过一道例题,说明左偏树在当今信息学竞赛中的应用。第五部分对各种可并堆作了一番比较。最后总结出左偏树的特点以及应用前景。 【关键字】左偏树可并堆优先队列 【目录】 一、引言 (2) 二、左偏树的定义和性质 (2) 2.1 优先队列,可并堆 (2) 2.1.1 优先队列的定义 (2) 2.1.2 可并堆的定义 (2) 2.2 左偏树的定义 (3) 2.3 左偏树的性质 (4) 三、左偏树的操作 (6) 3.1 左偏树的合并 (6) 3.2 插入新节点 (8) 3.3 删除最小节点 (9) 3.4 左偏树的构建 (9) 3.5 删除任意已知节点 (10) 3.6 小结 (13) 四、左偏树的应用 (15) 4.1 例——数字序列(Baltic 2004) (15) 五、左偏树与各种可并堆的比较 (18) 5.1 左偏树的变种——斜堆 (18) 5.2 左偏树与二叉堆的比较 (19) 5.3 左偏树与其他可并堆的比较 (19) 六、总结 (22) 在线代理|网页代理|代理网页|https://www.360docs.net/doc/c84180497.html,

【正文】 一、引言 优先队列在信息学竞赛中十分常见,在统计问题、最值问题、模拟问题和贪心问题等等类型的题目中,优先队列都有着广泛的应用。二叉堆是一种常用的优先队列,它编程简单,效率高,但如果问题需要对两个优先队列进行合并,二叉堆的效率就无法令人满意了。本文介绍的左偏树,可以很好地解决这类问题。 二、左偏树的定义和性质 在介绍左偏树之前,我们先来明确一下优先队列和可并堆的概念。 2.1优先队列,可并堆 2.1.1优先队列的定义 优先队列(Priority Queue)是一种抽象数据类型(ADT),它是一种容器,里面有一些元素,这些元素也称为队列中的节点(node)。优先队列的节点至少要包含一种性质:有序性,也就是说任意两个节点可以比较大小。为了具体起见我们假设这些节点中都包含一个键值(key),节点的大小通过比较它们的键值而定。优先队列有三个基本的操作:插入节点(Insert),取得最小节点(Minimum) 和删除最小节点(Delete-Min)。 2.1.2可并堆的定义 可并堆(Mergeable Heap)也是一种抽象数据类型,它除了支持优先队列的三个基本操作(Insert, Minimum, Delete-Min),还支持一个额外的操作——合并操作: H ← Merge(H1,H2) Merge( ) 构造并返回一个包含H1和H2所有元素的新堆H。 前面已经说过,如果我们不需要合并操作,则二叉堆是理想的选择。可惜合并二叉堆的时间复杂度为O(n),用它来实现可并堆,则合并操作必然成为算法的瓶颈。左偏树(Leftist Tree)、二项堆(Binomial Heap) 和Fibonacci堆(Fibonacci Heap) 都是十分优秀的可并堆。本文讨论的是左偏树,在后面我们将看到各种可并堆的比较。 在线代理|网页代理|代理网页|https://www.360docs.net/doc/c84180497.html,

算法设计与分析考试题及答案

算法设计与分析考试题 及答案 Company number:【WTUT-WT88Y-W8BBGB-BWYTT-19998】

一、填空题(20分) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:确定性 有穷性 可行性 0个或多个输入 一个或多个输出 2.算法的复杂性有时间复杂性 空间复杂性之分,衡量一个算法好坏的标准是 时间复杂度高低 3.某一问题可用动态规划算法求解的显着特征是 该问题具有最优子结构性质 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y 的一个最长公共子序列{BABCD}或{CABCD}或{CADCD } 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解 6.动态规划算法的基本思想是将待求解问题分解成若干_子问题 ,先求解_子问题 ,然后从这些子问题 的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为回溯法 背包问题的回溯算法所需的计算时间为o(n*2n ) ,用动态规划算法所需的计算时间为o(min{nc,2n }) 9.动态规划算法的两个基本要素是最优子结构 _和重叠子问题 10.二分搜索算法是利用动态规划法实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 ①问题具有最优子结构性质;②构造最优值的递归关系表达式; ③最优值的算法描述;④构造最优解; 2. 流水作业调度问题的johnson 算法的思想。 ①令N 1={i|a i =b i };②将N 1中作业按a i 的非减序排序得到N 1’,将N 2中作业按b i 的非增序排序得到N 2’;③N 1’中作业接N 2’中作业就构成了满足Johnson 法则的最优调度。 3. 若n=4,在机器M1和M2上加工作业i 所需的时间分别为a i 和b i ,且 (a 1,a 2,a 3,a 4)=(4,5,12,10),(b 1,b 2,b 3,b 4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。 步骤为:N1={1,3},N2={2,4}; N 1’={1,3}, N 2’={4,2}; 最优值为:38 4. 使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}。 解空间树为: 该问题的最优值为:16 最优解为:(1,1,0) 5. 设S={X 1,X 2,···,X n }是严格递增的有序集,利用二叉树的结点来存储S 中的元素,在表示S 的二叉搜索树中搜索一个元素X ,返回的结果有两种情形,(1)在二叉搜索树的内结点中找到X=X i ,其概率为b i 。(2)在二叉搜索树的叶结点中确定X ∈(X i ,X i+1),其概率为a i 。在表示S 的二叉搜索树T 中,设存储元素X i 的结点深度为C i ;叶结点(X i ,X i+1)的结点深度为d i ,则二叉搜索树T 的平均路长p 为多少假设二叉搜索树T[i][j]={X i ,X i+1,···,X j }最优值为m[i][j],W[i][j]= a i-1+b i +···+b j +a j ,则m[i][j](1<=i<=j<=n)递归关系表达式为什么 .二叉树T 的平均路长P=∑=+n i 1 Ci)(1*bi +∑=n j 0 dj *aj

设计方案范文合集八篇

设计方案范文合集八篇 设计方案范文合集八篇 为了确保事情或工作有序有力开展,常常需要预先准备方案,方案属于计划类文书的一种。方案应该怎么制定呢?以下是收集整理的设计方案8篇,仅供参考,希望能够帮助到大家。 设计方案篇1 一、活动目的 1、培养学生合作探究的精神与分析问题、解决问题的能力。 2、培养和增强学生的地理学习兴趣,关注身边的地理知识。 3、懂得多渠道收集课外资料。 二、活动时间及地点 三、活动方式 根据课室座位安排情况,以小组为单位,每两排组成一组,共分为四大组。以“野外考察员的困难”为主要内容,展开几个阶段的小组间的地理知识竞赛。 四、参与人员 全体同学 五、活动流程 活动刚开始,教师以一名“地理野外考察员”的身份登场,讲述他一天所遇到的困难。困难一:迷失了方向 1、活动准备

在活动前的地理课,向学生提出“当你迷失野外,你该如何来辨别方向”这一问题,让学生课后根据自己的生活经验或向有经验的长辈请教等各类方式收集有关方法,并以作业形式上交。 2、活动过程 学生以小组为单位,全组成员上交一份解决方法,教师当场逐一宣读,答对1个得1分,答错不得分。 3、活动小结 教师讲解野外辨别方向常用的几种方法。 附: 1)平时参考地图和指南针,同时积极观察周围的地形以及身边的植物来判断正确位置。 2)利用太阳 ①冬季日出位置是东偏南,日落位置是西偏南;夏季日出位置是东偏北,日落位置是西偏北;春分、秋分前后,日出正东,日落正西。 ②只要有太阳,就可以使用手表来辨别方向。按24小时制读出当时的时刻,将小时数除以二,将得到一个小时数。把手表水平放在手上或者地上,让手表的这个时刻对准太阳所在的方位,这时手表表面12点所指的方向是北方,6点所指的方向是南方。 设计方案篇2 1、幼儿园的功能组成 包括幼儿生活用房、服务用房、和供应用房三部分。 2、幼儿园的功能分析

算法设计与分析试卷A及答案

考试课程: 班级: 姓名: 学号: ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------

考试课程: 班级: 姓名: 学号: ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------

参考答案 一、填空 1、空间复杂度 时间复杂度 2、回溯法 3、递归算法 4、渐进确界或紧致界 5、原问题的较小模式 递归技术 6、问题的计算复杂性分析有一个共同的客观尺度 7、②③④① 8、问题的最优解包含其子问题的最优解 9、局部最优 10、正确的 三、简答题 1、高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需要几周时间的培训就可以胜任程序员的工作; 高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高; 高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可植性好、重用率高; 把繁杂琐碎的事务交给编译程序,所以自动化程度高,开发周期短,程序员可以集中时间和精力从事更重要的创造性劳动,提高程序质量。 2、 ①不能保证最后求得的解是最佳的;即多半是近似解。(少数问题除外) ②策略容易发现(关键:提取清楚问题中的维度), 而且运用简单,被广泛运用。 ③策略多样,结果也多样。 ④算法实现过程中,通常用到辅助算法:排序 3、解:① 因为:;01 -10n n )1-10n n (lim 22 2=+-+→∞n n 由渐近表达式的定义易知: 1-10n n 2 2+是n ;的渐近表达式。 ② 因为:;0n 1/ 5/n 1414)n 1/ 5/n 14(lim 22=++-++∞→n 由渐近表达式的定义易知: 14是14+5/n+1/ n 2的渐近表达式。 4、 找出最优解的性质,并刻划其结构特征。 递归地定义最优值。 以自底向上的方式计算出最优值。 根据计算最优值时得到的信息,构造最优解。 四、算法设计题 1、按照单位效益从大到小依次排列这7个物品为:FBGDECA 。将它们的序号分别记为1~7。则可生产如下的状态空间搜索树。其中各个节点处的限界函数值通过如下方式求得:【排序1分】 5x =6x =7x =

算法设计与分析考试题及答案

1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。 2.算法的复杂性有_____________和___________之分,衡量一个算法 好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显著特征是 ____________________________________。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。 6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为_____________。 8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。 9.动态规划算法的两个基本要素是___________和___________。 10.二分搜索算法是利用_______________实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 2.流水作业调度问题的johnson算法的思想。

计划方案合集10篇

计划方案合集10篇 计划方案合集10篇 为了确保我们的努力取得实效,通常会被要求事先制定方案,方案是在案前得出的方法计划。那么什么样的方案才是好的呢?下面是小编帮大家整理的计划方案10篇,仅供参考,大家一起来看看吧。计划方案篇1 各林场(所):为进一步深入贯彻《甘肃省自然保护区条例》及《XX市人民政府关于进一步加强封山禁牧工作的通知》和《XX林业总场封山禁牧管理暂行办法》精神,巩固XX林区近年来的封山禁牧成果,加快生态环境建设步伐,现就我场XX年封山禁牧工作安排如下:一、明确指导思想我场的封山禁牧工作,坚持统筹规划,以封为主,禁牧与圈养、恢复生态和保护林农利益相结合的指导思想,按照《森林法》、《森林法实施条例》及市局、总场关于封山禁牧工作的总体部署和要求,坚持把加强封山禁牧工作作为恢复植被、改善生态、提高林木尽快成林的重要措施,作为改善人居环境,促进人与自然和谐相处,构建和谐林区的重要保障。各林场(所)要从促进林区经济社会可持续发展的大局出发,切实增强责任感和紧迫感,采取切实有效的措施,加大工作力度,真正把封山禁牧工作抓紧抓好,确保取得实效。二、细化工作任务一要提高认识,统筹安排,强化责任,分解任务。各林场(所)主要领导要切实提高认识,将封禁工作放在同林业生产同等重要的位置上,同安排同部署,并根据市局、总场封禁工作会议精神,延伸签订封禁工作目标管理责任书,确保封禁工作责任分解到站,细化到人。二要广泛宣传动员,营造良好舆论氛围。各林场(所)要采取召开干部会、群众大会、养殖户专题会、管护人员工作会、发放宣传资料、刷写宣传标语、悬挂横幅、制做固定宣传碑等多种形式,广泛宣传《森林法》、《森林法实施条例》、《XX 市人民政府关于进一步加强封山禁牧工作的通知》《XX、林业总场封山禁牧管理暂行办法》等有关政策法规文件,教育林区群众充分认识封山禁牧的重大意义,明确封山禁牧的范围、措施和责任,引导群众正确处理长远利益与当前利益、整体利益与局部利益、封山禁牧与畜牧养殖的关系,真正把封山禁牧工作变为广大群众的自觉行动,为封山禁牧创造良好的舆论氛围。三要详细调查摸底,掌握

5.《算法设计与分析》试题库

《算法分析与设计》试题库 (一) 一、 选择题 1.应用Johnson 法则的流水作业调度采用的算法是(D ) A. 贪心算法 B.分支限界法 C.分治法 B. void hanoi(int n, int A, int B, int C) { if (n > 0) { hanoi(n-1, A, C, B); move( n, a,b); hanoi(n-1, C, B, A); 2.Hanoi 塔问题如下图所示。现要求将塔座A 上的的所有圆盘移到塔座 B 上,并 D.动态规划算法

3. 动态规划算法的基本要素为(C) A. 最优子结构性质与贪心选择性质 B ?重叠子问题性质与贪心选择性质 C.最优子结构性质与重叠子问题性质

D.预排序与递归调用 4. 算法分析中,记号0表示(B),记号0表示(A),记号。表示(D) A. 渐进下界 B. 渐进上界 C. 非紧上界 D. 紧渐进界 E. 非紧下界 5. 以下关于渐进记号的性质是正确的有:(A) A. f(n) - P(g(n)),g(n) - 心(h(n))二f(n) - P(h(n)) B. f(n) =0(g(n)),g(n) =0(h(n))二h(n) =0(f(n)) C. O(f(n ))+0(g( n)) = O(mi n{f(n ),g( n)}) D. f(n) =0(g(n)) = g(n) -0(f (n)) 6?能采用贪心算法求最优解的问题,一般具有的重要性质为:(A) A. 最优子结构性质与贪心选择性质 B ?重叠子问题性质与贪心选择性质 C. 最优子结构性质与重叠子问题性质 D. 预排序与递归调用 7.回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。 A. 广度优先 B.活结点优先 C.扩展结点优先 D.深度优先

社会网络分析法

第十三章社会网络分析法 近几十年来社会网络分析法有了迅速的发展,它已被“泛应用到了社会学、政治学、人类学和社会政策研究等多个领域。本章我们将侧重介绍社会网络分析法的基本概念、历史、主要分析技术及其应用。 第一节社会网络分析的概念 一、什么是社会网络分析 网络指的是各种关联,而社会网络(social network)即可简单地称为社会关系所构成的结构。故从这一方面来说,社会网络代表着一种结构关系,它可反映行动者之间的社会关系。构成社会网络的主要要素有: 行动者(actor):这里的行动者不但指具体的个人,还可指一个群体、公司或其他集体性的社会单位。每个行动者在网络中的位置被称为“结点(node)”。 关系纽带(relational tie):行动者之间相互的关联即称关系纽带。人们之间的关系形式是多种多样的,如亲属关系、合作关系、交换关系、对抗关系等,这些都构成了不同的关系纽带。 二人组(dyad):由两个行动者所构成的关系。这是社会网络的最简单或最基本的形式,是我们分析各种关系纽带的基础。 二人组(triad):由三个行动者所构成的关系。 子群(subgroup):指行动者之间的任何形式关系的子集。 群体(group):其关系得到测量的所有行动者的集合。 社会网络分析是对社会网络的关系结构及其属性加以分析的一套规范和方法。它又被称结构分析(structural analysis),因为它主要分析的是不同社会单位(个体、群体或社会)所构成的社会关系的结构及其属性。 从这个意义上说,社会网络分析不仅是对关系或结构加以分析的一套技术,还是一种理论方法——结构分析思想。因为在社会网络分析学者看来,社会学所研究的对象就是社会结构,而这种结构即表现为行动者之间的关系模式。社会网络分析家B·韦尔曼(Barry Wellman)指出:“网络分析探究的是深层结构——隐藏在复杂的社会系统表面之下的一定的网络模式。”例如,网络分析者特别关注特定网络中的关联模式如何通过提供不同的机会或限制,从而影响到人们的行动。 韦尔曼指出,作为一种研究社会结构的基本方法,社会网络分析具有如下基本原理: 1.关系纽带经常是不对称地相互作用着的,在内容和强度上都有所不同。 2.关系纽带间接或直接地把网络成员连接在一起;故必须在更大的网络结构背景中对其加以分析。 3.社会纽带结构产生了非随机的网络,因而形成了网络群(network clusters)、网络界限和交叉关联。

算法分析期末试题集答案

1.应用Johnson 法则的流水作业调度采用的算法是(D ) A. 贪心算法 B. 分支限界法 C.分治法 D. 动态规划算法 2.Hanoi 塔问题如下图所示。现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置。移动圆盘时遵守Hanoi 塔问题的移动规则。由此设计出解Hanoi 塔问题的递归算确的为:(B ) 3. 动态规划算法的基本要素为(C ) A. 最优子结构性质与贪心选择性质 B .重叠子问题性质与贪心选择性质 C .最优子结构性质与重叠子问题性质 D. 预排序与递归调用 4. 算法分析中,记号O 表示(B ), 记号Ω表示(A ), 记号Θ表示(D )。 A.渐进下界 B.渐进上界 C.非紧上界 D.紧渐进界 E.非紧下界 5. 以下关于渐进记号的性质是正确的有:(A ) A.f (n)(g(n)),g(n)(h(n))f (n)(h(n))=Θ=Θ?=Θ B. f (n)O(g(n)),g(n)O(h(n))h(n)O(f (n))==?= C. O(f(n))+O(g(n)) = O(min{f(n),g(n)}) D. f (n)O(g(n))g(n)O(f (n))=?= 6. 能采用贪心算法求最优解的问题,一般具有的重要性质为:(A ) A. 最优子结构性质与贪心选择性质B .重叠子问题性质与贪心选择性质 C .最优子结构性质与重叠子问题性质D. 预排序与递归调用 7. 回溯法在问题的解空间树中,按(D )策略,从根结点出发搜索解空间树。 A . 广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先 Hanoi 塔 B. void hanoi(int n, int A, int B, int C) { if (n > 0) { hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); }

社会网络分析方法(总结)

社会网络分析方法 SNA分析软件 ●第一类为自由可视化SNA 软件,共有Agna 等9 种软件,位于图1 的右上角,这类软件可以自 由下载使用,成本低,但一般这类软件的一个共同缺点是缺乏相应的如在线帮助等技术支持; ●第二类为商业可视化SNA 软件,如InFlow 等3种,这类软件大都有良好的技术支持;(3)第 三类为可视化SNA 软件,如KliqFinder 等4 种,这类软件一般都是商业软件,但他们都有可以通过下载试用版的软件,来使用其中的绝大部分功能 ●第四类为自由非可视化SNA 软件,如FATCAT 等7 种,这类软件的特点是免费使用,但对SNA 的分析结果以数据表等形式输出,不具有可视化分析结果的功能; ●第五类为商业非可视化SNA 软件,只有GRADAP 一种,该软件以图表分析为主,不具有可 视化的功能。在23 种SNA 软件中,有16 种SNA 软件,即近70%的SNA 软件,具有可视化功能。 SNA分析方法 使用SNA 软件进行社会网络分析时,一般需要按准备数据、数据处理和数据分析三个步骤进行。尽管因不同的SNA 软件的具体操作不同,但这三个步骤基本是一致的。 1.准备数据,建立关系矩阵 准备数据是指将使用问卷或其他调查方法,或直接从网络教学支撑平台自带的后台数据库中所获得的用于研究的关系数据,经过整理后按照规定格式形成关系矩阵,以备数据处理时使用。这个步骤也是SNA 分析的重要的基础性工作。SNA 中共有三种关系矩阵:邻接矩(AdjacencyMatrix)、发生阵(Incidence Matrix)和隶属关系矩阵(Affiliation Matrix)。邻接矩阵为正方阵,其行和列都代表完全相同的行动者,如果邻接矩阵的值为二值矩阵,则其中的“0”表示两个行动者之间没有关系,而“1”则表示两个行动者之间存在关系。然而我们

算法分析期末试题集规范标准答案(6套)

《算法分析与设计》期末复习题(一) 一、 选择题 1.应用Johnson 法则的流水作业调度采用的算法是(D ) A. 贪心算法 B. 分支限界法 C.分治法 D. 动态规划算法 2.Hanoi 塔问题如下图所示。现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置。移动圆盘时遵守Hanoi 塔问题的移动规则。由此设计出解Hanoi 塔问题的递归算法正确的为:(B ) Hanoi 塔 A. void hanoi(int n, int A, int C, int B) { if (n > 0) { hanoi(n-1,A,C, B); move(n,a,b); hanoi(n-1, C, B, A); } B. void hanoi(int n, int A, int B, int C) { if (n > 0) { hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); }

C. void hanoi(int n, int C, int B, int A) { if (n > 0) { hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); } D. void hanoi(int n, int C, int A, int B) { if (n > 0) { hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); } 3.动态规划算法的基本要素为(C) A. 最优子结构性质与贪心选择性质 B.重叠子问题性质与贪心选择性质

精选方案策划合集5篇

精选方案策划合集5篇 方案策划篇1 一、日本寿司店的总体目标 2. 产品定价及收入目标 产品定价寿司:甜鸡蛋寿司 12元加州反卷寿司12元烤鳗鱼寿司 12元樱花反卷寿司12元香辣牛肉寿司12元鱼松蟹棒寿司12元鱼松火腿寿司12元金枪鱼寿司8元球生菜寿司8元紫薯红薯寿司8元鱼松寿司 8元红心蛋黄寿司 8元飞鱼子寿司8元什锦色拉寿司 7元水果寿司 7元果冻寿司 6元火腿寿司 6元手卷:黄瓜手卷 5元/2个鱼松手卷 7元/2个金枪鱼手卷7元/2个色拉手卷 7元/2个烤鳗鱼手卷7元/2个饭团:红心蛋黄饭团 5元/2个紫薯饭团 5元/2个鱼松饭团 7元/2个金枪鱼饭团7元/2个火腿饭团 7元/2个预计每日将会有50份订单,每份订单平均10元,平均每份订单成本3元利润7元。每日将获得利润10x50=500元每日将获纯利润7x50=350元 收入目标 月收入:20190.00元年收入:240000.00元 员工工资以及支出经费:40000.00元年净收入:201900.00元 3. 发展目标 将日本寿司店发展成特色小资情调的店子。主要顾客为情侣、中

高消费水平学生、喜爱日韩的女生等。 本店以优雅的环境,日本特色的风味为主打。在提供就餐的同时能享受到不一样的优质服务。且寿司分为中高档,既能满足高消费水平学生的消费欲望,同时满足一般学生的购买能力。 立志将日本寿司店在我校附近立足,并以优质传统的特色服务收揽各新老顾客。 二、市场状况分析 1. 市场需求 自然生长的稻米和最新鲜的鱼生,用极致简单又饶有趣味的生食方式组合在一起,寿司已经迅速发展成为全世界都无法抗拒的美味新宠。寿司风潮正全面来袭。走进店堂,就可以看到一碟碟的寿司由传送带传送着,从眼前回转而过。自己伸手从传送带上取下自己爱吃的寿司,最后根据所吃的碟数来结账,这就是寿司。因其价格低廉、轻松随意,已经越来越受到普通消费者的欢迎。 作为全世界正越来越风行的日本寿司,正被越来越多追求品位和健康的人所钟爱。纽约、巴黎、伦敦、悉尼、香港,时髦都市中的寿司店,门前永远不缺时髦男女耐心排长队。寿司经营店也在中国不断增长。什么原因呢?它的魅力在于:第一、口味鲜美, 而且丰富多样的品种满足了不同口味、不同喜好的人们。寿司的制作原料可谓包罗万象, 不拘一格,从鱼类、贝类到牛肉、禽蛋甚至蔬菜、瓜果都可以制成风味各异的寿司。 第二、寿司符合人们健康饮食的标准。日本饮食在养生方面具有

算法分析与设计复习题及答案

算法分析与设计复习题及答案一、单选题 1.D 2.B 3.C 4.D 5.D 6.D 7.C 8.D 9.B 10.C 11.D 12.B 13.D 14.C 15.C 16.D 17.D 18.D 19.D 20.C 1.与算法英文单词algorithm具有相同来源的单词是()。 A logarithm B algiros C arithmos D algebra 2.根据执行算法的计算机指令体系结构,算法可以分为()。 A精确算法与近似算法B串行算法语并行算法 C稳定算法与不稳定算法D32位算法与64位算法 3.具有10个节点的完全二叉树的高度是()。 A6B5C3D 2 4.下列函数关系随着输入量增大增加最快的是()。 Alog2n B n2 C 2n D n! 5.下列程序段的S执行的次数为( )。 for i ←0 to n-1 do for j ←0 to i-1 do s //某种基本操作 A.n2 B n2/2 C n*(n+1) D n(n+1)/2 6.Fibonacci数列的第十项为( )。 A 3 B 13 C 21 D 34 7.4个盘子的汉诺塔,至少要执行移动操作的次数为( )。 A 11次 B 13次 C 15次 D 17次 8.下列序列不是堆的是()。 A 99,85,98,77,80,60,82,40,22,10,66 B 99,98,85,82,80,77,66,60,40,22,10 C 10,22,40,60,66,77,80,82,85,98,99 D 99,85,40,77,80,60,66,98,82,10,22 9.Strassen矩阵乘法的算法复杂度为()。 AΘ(n3)BΘ(n2.807) CΘ(n2) DΘ(n) 10.集合A的幂集是()。 A.A中所有元素的集合 B. A的子集合 C. A 的所有子集合的集合 D. 空集 11.与算法英文单词algorithm具有相同来源的单词是()。 A logarithm B algiros C arithmos D algebra 12.从排序过程是否完全在内存中显示,排序问题可以分为()。 A稳定排序与不稳定排序B内排序与外排序 C直接排序与间接排序D主排序与辅助排序 13.下列()不是衡量算法的标准。 A时间效率B空间效率 C问题难度D适应能力 14.对于根树,出度为零的节点为()。 A0节点B根节点C叶节点D分支节点 15.对完全二叉树自顶向下,从左向右给节点编号,节点编号为10的父节点编号为()。 A0B2C4D6 16.下列程序段的算法时间的复杂度为()。 for i ←0 to n do for j ←0 to m do

【实用】工作计划合集六篇

【实用】工作计划合集六篇 工作计划篇1 为了贯彻落实“安全第一,预防为主,综合治理”的方针,强化安全生产目标管理。结合工厂实际,特制定20xx年安全生产工作计划,将安全生产工作纳入重要议事日程,警钟长鸣,常抓不懈。 一、下半年目标 实现下半年无死亡、无重伤、无重大生产设备事故,无重大事故隐患,工伤事故发生率低于厂规定指标,综合粉尘浓度合格率达80%以上(如下表)。 二、指导思想 要以公司对20xx年安全生产目标管理责任为指导,以工厂安全工作管理制度为标准,以安全工作总方针“安全第一,预防为主。”为原则,以车间、班组安全管理为基础,以预防重点单位、重点岗位重大事故为重点,以纠正岗位违章指挥,违章操作和员工劳动保护穿戴为突破口,落实各项规章制度,开创安全工作新局面,实现安全生产根本好转。 三、牢固树立“安全第一”的思想意识 各单位部门要高度重视安全生产工作,把安全生产工作作为重要的工作来抓,认真贯彻“安全第一,预防为主”的方针,进一步增强安全生产意识,出实招、使真劲,把“安全第一”的方

针真正落到实处,通过进一步完善安全生产责任制,首先解决领导意识问题,真正把安全生产工作列入重要议事日程,摆到“第一”的位置上,只有从思想上重视安全,责任意识才能到位,才能管到位、抓到位,才能深入落实安全责任,整改事故隐患,严格执行“谁主管,谁负责”和“管生产必须管安全”的原则,力保安全生产。 四、深入开展好安全生产专项整治工作 根据工厂现状,确定出20xx年安全生产工作的重点单位、重点部位,完善各事故处理应急预案,加大重大隐患的监控和整改力度,认真开展厂级月度安全检查和专项安全检查,车间每周进行一次安全检查,班组坚持班中的三次安全检查,并要求生产科、车间领导及管理人员加强日常安全检查,对查出的事故隐患,要按照“三定四不推”原则,及时组织整改,暂不能整改的,要做好安全防范措施,尤其要突出对煤气炉、锅炉、硫酸罐、液氨罐等重要部位的安全防范,做好专项整治工作,加强对易燃易爆、有毒有害等危险化学品的管理工作,要严格按照《安全生产法》、《危险化学品安全管理条例》强化专项整治,加强对岗位现场的安全管理,及时查处违章指挥,违章操作等现象,限度降低各类事故的发生,确保工厂生产工作正常运行。 五、继续加强做好员工安全教育培训和宣传工作 工厂采取办班、班前班后会、墙报、简报等形式,对员工进行安全生产教育,提高员工的安全生产知识和操作技能,定期或

《算法分析与设计》期末试题及参考答案

《算法分析与设计》期末试题及参考答案 一、简要回答下列问题: 1.算法重要特性是什么? 1.确定性、可行性、输入、输出、有穷性 2. 2.算法分析的目的是什么? 2.分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。 3. 3.算法的时间复杂性与问题的什么因素相关? 3. 算法的时间复杂性与问题的规模相关,是问题大小n的函数。 4.算法的渐进时间复杂性的含义? 4.当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。 5.最坏情况下的时间复杂性和平均时间复杂性有什么不同? 5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的 算法所耗时间。最坏情况下的时间复杂性取的输入实例中最大的时间复杂度: W(n) = max{ T(n,I) } , I∈Dn 平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和: A(n) =∑P(I)T(n,I) I∈Dn 6.简述二分检索(折半查找)算法的基本过程。 6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较, 如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]

算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末复习题 一、选择题 1.算法必须具备输入、输出和( D )等4个特性。 A.可行性和安全性B.确定性和易读性 C.有穷性和安全性D.有穷性和确定性 2.算法分析中,记号O表示( B ),记号Ω表示( A ) A.渐进下界 B.渐进上界 C.非紧上界 D.紧渐进界 3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。在某台计算机上实现并完 成概算法的时间为t秒。现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题( B )解题方法:3*2^n*64=3*2^x A.n+8 B.n+6 C.n+7 D.n+5 4.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1, T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。 A.O(logN) B.O(N) C.O(NlogN) D.O(N2logN) 5.直接或间接调用自身的算法称为( B )。 A.贪心算法B.递归算法 C.迭代算法D.回溯法 6.Fibonacci数列中,第4个和第11个数分别是( D )。 A.5,89 B.3,89 C.5,144 D.3,144 7.在有8个顶点的凸多边形的三角剖分中,恰有( B )。 A.6条弦和7个三角形B.5条弦和6个三角形 C.6条弦和6个三角形D.5条弦和5个三角形 8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。 A.重叠子问题B.最优子结构性质 C.贪心选择性质D.定义最优解 9.下列哪个问题不用贪心法求解( C )。 A.哈夫曼编码问题B.单源最短路径问题 C.最大团问题D.最小生成树问题 10.下列算法中通常以自底向上的方式求解最优解的是( B )。 A.备忘录法B.动态规划法 C.贪心法D.回溯法 11.下列算法中不能解决0/1背包问题的是( A )。 A.贪心法B.动态规划 C.回溯法D.分支限界法 12.下列哪个问题可以用贪心算法求解( D )。

相关文档
最新文档