分布式算法设计基础

分布式算法设计基础
分布式算法设计基础

分布式算法设计基础

课程学时数:每周4学时

Gerard Tel,《Introduction to Distributed Algorithms(Second Edition)》,1999

分布式算法导论(第二版)(英文版)

外语水平高的可以直接用原版教材,其他同学可以中文版为主,参考原版教材。

第一章分布式系统

分布式算法的研究,来源于分布式系统开发活动中的基础研究,其内容构成了分布式计算的核心技术。

1.1什么是分布式系统?

定义.一个分布式系统是指以某种方式合作的若干计算机或处理器上的所有计算机应用。

该定义覆盖:广域计算机通讯网络、局域网、每个处理器具有自己控制部件的多处理器计算机,以及合作、协同处理系统。

术语:“分布式系统”一般是指自治计算机、进程和处理器的集合。作为分布式系统的一个结点,计算机、进程、处理器,每一个都是自治的,它们都必须有自己的控制。

分布式系统与并行计算机体系结构之间的联系:

SISD(传统机器,不是);

MISD(没有对应的系统);

SIMD(不是);

MIMD(是): 要求各结点具有并发或并行执行的能力,交换信息的能力。

进程能够起到一个分布式系统结点的作用,单机上的多进程系统是分布式系统的早期雏形,也归属于分布式系统的范畴,是分布式系统的特殊情况。除了单机上的分布式系统之外,大多数情况下,一个分布式系统至少包含n个由通讯硬件互联在一起的处理器,包括现在的多核系统。

在分布式系统中,进程与1980年代早期出现的Agent 之间存在密切的联系,是Agent实现的重要支撑技术。

进程→ Agent(软计算结点)→网络计算→网格计算

●选择分布式系统的动机

(1)信息交换

(2)资源共享

(3)通过重复提高可靠性

(4)通过并行化提高性能

(5)通过专门化简化设计

(6)问题本身的特点决定

●计算机网络

计算机网络是用通信机构连接的一个计算机的集合。计算机相互之间能够交换信息。通信机构、计算机集合之间可能分别有层次之分,它们之间的某些互连关系、控制关系等形成了分布式网络体系结构。

计算机网络的类型:

局域网:主要目的是交换信息和协同计算

广域网:主要目的是交换信息和资源共享

两种网络之间并没有严格的界限。从算法的角度看,如果不考虑实现,没有必要严格区分。对分布式算法而言,两种网络可能影响的差别因素主要包括:

(1)可靠性参数

(2)通信时间(包括通信延迟)

(3)同种(齐性)或异质(非齐性)

(4)相互间的信任

●广域网络(略)

广域网络的组织结构和算法问题

互连方式一般是采用点对点方式连接,两个结点之间的通信总是通过专属于这个结点的一个机制进行,可以是电话线、光纤等。互连结构在数学上可以抽象为图论中的无向或有向图,故有关图论的基础理论和计算方法广泛应用于分布式系统的研究与开发。为了实现可靠的信息交换,需要解决下列算法问题:

(1)点对点数据交换的可靠性

用通信协议保证,要考虑容错能力

(2)通信路径的选择

用路由协议算法保证

(3)拥挤控制

采用中心结点机的控制或分散控制策略

(4)防止死锁

死锁预防和死锁检测

(5)保密

数据加密、身份认证技术、防入侵检测技术等

以上仅涉及网络组织结构方面必须解决的问题,属系统层面而非应用层面的问题。应用层面的问题由具体问题处理算法的计算方法和算法来负责解决。

●局域网(略)

局域网络的组织结构和算法问题

组织结构:一般为总线连接,每个进程每次只能发送一个消息,在此基础上可发展进程级模拟通信系统。早期的局域网一般采用总线结构,但并非所有的局域网都使用总线结构,如IBM的SNA,可构建局域网。

局域网的计算需要解决下列算法问题:

(1)广播与同步广播通信与同步算法

(2)Election—投票,即选择某个进程解决某个任务

(3)终止性检测检测某个处理机(或进程任务是否已

经完成或终止执行)

(4)资源分配分配网络上的各种资源

(5)互斥对某些共享资源进行互斥管理

(6)死锁检测和化解

(7)分布式文件维护保持分布式文件系统的完整性

和一致性

●多处理器计算机

1.Transputer 计算机

2.Connection Machine (连接机器)

node:一个快速处理器,结点内部具有并行处理方式。

一个向量处理部件,可以构成外部并行处理方式。

多处理器计算机设计的一种非常流行的处理器是Transputer片:

包含:一个CPU,一个专用浮点处理部件FPU,一个局部存储器,四个专用的通信处理器

这样一个Transputer片子很容易与四个片子相连构成四度网络,内部采用CSP理论(通信顺序进程)与技术。

Connection Machine机器除了由许多结点提供并行处

理方式外,还提供了结点的内部(向量)并行处理方式。

3.机群系统

目前在硬件技术上已经相当成熟。

多处理器计算机(包括多计算机系统)的构造需要解决几个算法问题,其中一些类似于网络中的问题:

(1)消息传递系统的实现

(2)虚拟共享存储的实现

(3)负载平衡与应用密切相关

(4)防不可检测故障的鲁棒性

●合作处理

将复杂计算的设计构造成一个合作处理的多处理器(机)集合可能更好。但须考虑:

(1)存储操作的原子性

(2)生产与消费问题

(3)废料回收

通过共享存储器实现进程之间的通信可解决上述问题,但需要操作系统和程序设计环境提供:

(1)信号灯

(2)管程

(3)管道

(4)消息发送

(5)远程访问

●体系结构

一个分布式系统的通信子系统在执行任务时的复杂性决定了子系统的设计需要实现分层,由多层协议来分担执行

网络通信的任务,由此形成了网络的通信协议技术。

ISO组织提出网络开放系统互连的七层协议(OSI)

●语言支持

并行与分布式程序设计语言,具有下列表达能力

(1)并行

(2)通信

(3)非确定性

●分布式算法

无论一个分布式系统如何设计,采用何种开发方法进行设计,也无论整个系统的架构如何设计,作为支撑分布式计算的核心基础和技术,分布式算法在分布式系统开发和分布式应用中担当了十分重要的角色,其或者独立、完整地出现在某一层软件之中,也可能内嵌在整个分布式系统之中。其中,分布式基础算法具有特别重要的作用,因为大量分布式计算提出的问题,往往具有共同的特性、特点和相似性,解决这些问题在方法论上归结为一些分布式基础算法的研究。

分布式算法与顺序算法(或集中式算法)的比较

(1) 缺乏全局状态知识

(2)缺乏全局时钟框架

(3)非确定性与通信延迟

(4)故障与容错

(5)高性能计算带来的计算密集性、数据密集性、通信密集性问题,引发的可信计算问题等

高性能计算:计算密集性、数据密集性、通信密集性

1.2分布式程序设计环境

(1) 以程序设计语言为基础的环境

如并发Pascal,CSP,Ada,等等

(2) 分布式程序设计的环境

在操作系统上增加一层分布式(并行)程序设计环境,将一批系统调用向用户开放,如增加UNIX系统调用,PV/M、MPI机制和功能等,支持分布式(并行)程序设计。

(3) 支持分布式程序设计和集成软件开发的环境

CORBA,COM .NET,J2EE等

(4) 支撑分布式程序设计与软件开发的方法学

OOP,组件软件开发方法,软件重用,软件系统架构等

1.3分布式算法的理论基础

算法的研究,离不开抽象的计算模型,分布式算法也不例外。为了便于算法的分析、理解、设计、比较和对算法的性质进行比较、分析、研究,有必要引入和发展恰当的分布式计算模型,使得算法能够在抽象的分布式计算模型上运行,便于对算法进行性能分析。

于是,分布式计算模型就成为分布式算法研究的一个切入点。

第二章 分布式计算模型

研究计算,离不开计算模型。计算模型有不同层次之分。此处介绍的计算模型,是指具有状态转换机制的能够支撑分布式算法运行的抽象数学模型——分布式数学机器。

1. 变迁系统与分布式算法

一个系统如果它的状态变化是离散的,状态的改变由事件驱动,通常可以用变迁系统来描述。观察计算,可以从函数计算、计算前后必须满足的条件(逻辑公式刻画)、代数运算的角度进行,也可以从语言操作指令执行的前后状态变化的角度进行。如果从状态变化的角度进行观察,就必须要建立一种数学机器模型,能够严格、准确地执行语言的操作指令。这样一种机器,通常称为计算模型。 ? 变迁系统

变迁系统由系统所有可能的状态的集合构成,系统的“变迁”可以在此状态集合中进行。一个选定的状态的子集合中的每一个状态可以使系统启动,这个子集合称为初始状态集合。

在分布式系统中,系统的分布式算法的一个状态通常由构成该系统分布式算法的所有进程的状态和通道的状态组成,为了避免系统中单个进程的状态和整个分布式系统的分布式算法状态之间产生混淆,我们今后将把单个进程的“状态”称为状态,将分布式算法的“全局状态”称为形态(Configuration )。

定义 2.1 一个变迁系统是一个三元组),,(I C S →=,其中,C 是一个形态的集合,→ 是C 上的一个二元变迁关系,I 是C 中初始形态的一个集合。

变迁关系是C ×C 的一个子集合,我们有时也用 ∈→),(δγ 来更方便地表达记号δγ→ 。

定义 2.2 令 ),,(I C S →= 是一个变迁系统,S 的一次执行是一个形态的极大序列...)(210,,,γγγ=E ,其中,I ∈0γ,且对所有的 i ≥0,1+→i i γγ 。

形态 γ 称为终止形态,如果不存在形态 δ 使得 δγ→ 。

注意:对所有的i ,具有1+→i i γγ 的一个序列...)(210,,,γγγ=E 是极大的,如果它是无穷的,或者它以一个终止形态结束。

定义 2.3 形态 δ 是由 γ 可达的,记为 γ?δ,如果存在一个序列: )(210δγγγγγ==k ,,,, ,

满足对所有的 0 ≤i < k ,1+→i i γγ 。

形态 δ 是由可达的,如果 δ 可以由一个初始形态可达。

? 具有异步消息传递机制的变迁系统

一个分布式系统由一组进程和一个通信子系统组成,每一个进程本身是一个变迁系统,并能够与通信子系统交互。

为了避免分布式系统的属性和单一进程的属性之间发生混淆,我们约定:

术语“变迁”和“形态”用于整个系统的属性描述,而(另一等价的)术语“事件”和“状态”用于进程的属性的描述。

为了与通信系统交互,一个进程的内部不仅有通常的事件,而且还有发送事件和接收事件,消息会被产生或被消费。设M 表示一个可能的消息的集合,M (M)表示由多个M 的消息集合组成的集合(注:此处为集合的集合,但不是指幂集合)。

定义 2.4 一个进程的局部算法是一个五元组(Z, I, ?i , ?s , ?r ),其中,Z 是一个状态的集合,I 是Z 中初始状态的一个子集合,?i 是Z×Z 上的一个关系,?s 和 ?r 是Z×M ×Z 上的关系。Z 上的事件关系 ? 定义为:

c ?

d ? (c,d) ∈ ?i ∨ ?m ∈ M((c ,m ,d )∈ ?s ∪ ?r )

关系?i 、?s 、?r 分别对应于进程的内部事件、发送事件和接收事件。 今后,我们将使用p, q, r, p 1 ,p 2 ,p 3 ,?? 来表记进程,用P 来表记一个

系统进程的集合。

定义2.4可以充当进程的一个理论模型。一个进程的执行实际上是进程的一系列动作或操作(事件)的执行,也是变迁系统),,(I C S →=的执行。

我们感兴趣的是整个系统的执行,而在这样一次执行中,各进程的执行通过通信子系统协调交换信息。为了描述这样的通信协调,下面将分布式系统定义为一个变迁系统,其中,形态集、变迁关系、初始状态根据进程对应的成分构造。

定义2.5 进程集合P={ p 1,p 2,??,p N } 的一个分布式算法是P 中每一个

进程的局部算法组成的一个集合。

分布式算法的行为由后面的变迁系统刻画,形态由每一个进程的状态和变迁过程中的消息集合构成,变迁的发生将最终落实到某个进程或某些进程上的事件,它们不仅影响进程的状态,而且还影响消息集合(或者受到消息集合的影响)。初始形态是这样的形态,系统中的每一个进程此时都处于初始状态,而且消息集合是空集合(对应通道为空)。

定义2.6 由进程p 1,p 2,??,p N 构成的分布式算法在异步消息传递机制

下引起的变迁系统(这里,每一个p i 的局部算法为(Z p i , I p i , ?p i i , ?p i s , ?p i r ))是一个三元组),,(I C S →=,其中,

⑴ C ={(c p 1,c p 2 ,??,c p N ,M) | (?p i ∈P :c p i ∈ Z p i ,1≤i ≤N) 且 M ∈M (M)} ⑵ → =(∪p ∈P →p ),其中,→p 是对应于进程p 的状态改变的变迁,→p i 是下列对集:

(c p 1,c p 2 ,?,c p i ,?,c p N ,M 1),(c p 1,c p 2 ,?,c ’p i ,?,c p N ,M 2)

它们使下面三个条件之一成立:

① (c p i ,c ’p i )∈ ?p i i 且 M 1 = M 2 ;

② 对某个m ∈M ,(c p i ,m ,c ’p i )∈ ?p i s 且 M 2 = M 1∪{m } ;

③ 对某个m ∈M ,(c p i ,m ,c ’p i )∈ ?p i r 且 M 1 = M 2∪{m } ;

⑶ I ={(c p 1,c p 2,??,c p N ,M) | (?p i ∈P :c p i ∈ I p i )且M = φ,1≤i ≤N }

分布式算法的执行是一种由变迁系统引起的执行,一个执行的事件清楚地表明了下面的注解:

消息用m表示,问题:两条消息内容相同怎么办?如何区分?

二元对(c,d)∈?p i被称为是进程p的可能的内部事件,而?p s和?p r中的三元组分别称为进程p的发送事件和接收事件。据此,我们引入下列术语:

?由p的e= (c,d)给定的内部事件称为在形态γ=(c

p1,c p

2

,?,c p,?,

c p

N

,M)上可应用的(或称为可应用于形态γ),如果c p= c。此时,e(γ)定义为

形态(c p

1,c p

2

,?,d,?,c p

N

,M)。

?由p的e= (c, m,d)给定的发送事件称为可应用于形态γ=(c

p1,c p

2

?,c

p ,?,c p

N

,M),如果c p = c 。此时,e(γ)定义为形态(c p

1

,c p

2

,?,d,

?,c

p N

,M∪{m})。

?由p的e= (c, m,d)给定的接收事件称为可应用于形态γ=(c

p1,c p

2

?,c

p ,?,c p

N

,M),如果c p = c 且m∈M。此时,e(γ)定义为形态(c p

1

,c p

2

?,d,?,c

p N

,M-{m})。

注意:这里要假定,对于每一个消息,存在能接收此消息的唯一的进程,该进程称为此消息的目的地。否则,M-{m}可能会丢失向其他结点发送的消息。

?具有同步消息传递机制的变迁系统

消息传递称为是同步的,如果一个发送事件和对应的接收事件被协调成系统的一个单独的变迁。这就是说,一个进程只有当消息的目的地进程准备好接收这个消息时才能发送消息。结果,系统的变迁分为两类,一类对应于进程的内部状态的改变,另一类对应于把两个进程的通信事件组合在一起。技术上,这样的同步消息传递用通信原语来实现。

定义2.7由进程p

1, p

2

,??,p

N

构成的分布式算法在同步消息传递机制下引

起的变迁系统(这里,每一个p

i 的局部算法为(Z p

i

, I p

i

, ?p

i

i,?

p i

s,?

p i

r))是一个

三元组)

,

,

(I

C

S→

=,其中,

⑴ C ={(c p

1,c p

2

,?,c p

i

,?,c p

N

) |?p

i

∈P:c p

i

∈ Z

p i

,1≤i≤N }

⑵→=(∪

p∈P →p)∪(∪

p, q∈P: p≠q

→pq),其中,

?→

p i

为对集:

(c p

1,c p

2

,?,c p

i

,?,c p

N

),(c p

1

,c p

2

,?,c’p

i

,?,c p

N

)

这里(c p

i ,c’p

i

)∈?p

i

i且不强调M 。

?→

p i p j

为对集:

(?,c p

i ,?,c p

j

,?),(?,c’p

i

,?,c’p

j

,?)

这里存在消息m ∈M,使得

(c p

i ,m,c’p

i

)∈?p

i

s且 (c

p j

,m,c’p

j

)∈?p

j

r

⑶I ={(c p

1,c p

2

,??,c p

N

) | p

i

∈P:c p

i

∈ I

p i

,1≤i≤N }

一些分布式系统允许混合通信形式,在这些系统中,进程拥有通信原语,可以同步或者以异步方式进行通信。在分布式程序设计中,要设计这样的分布式系统的一个形式模型是不困难的,比如CSP。

在分布式系统中,我们已经注意到,许多情况下同步消息传递可视为异步消息传递的一种特殊情况。在同步消息传递的情况下,算法的执行可以限制为这样一些执行:每一个发送事件的后面紧跟着一个接受事件,在没有收到消息之前,不执行其他操作,从而实现同步。由此可以开发相应的具有同步通信方式的异步算法。

但是,必须小心,如果针对异步消息传递机制开发的算法在具有同步消息传递机制的系统中执行,通信子系统引起的不确定性必须由各进程中增加的不确定性来平衡,否则,可能导致死锁。此处指同步进程不应该非要接受同步消息,而应该增加不确定性以防止死锁。

由于通信系统在各个结点的子系统往往是相同的,因此,不可能要求参与交换消息的通信子系统的进程运行行为具有对称性,否则必然导致死锁。例如,两个交换消息的进程如果要求它们都必须在接收消息之前发送各自的消息,那么,通信将不可能发生而导致死锁。

两个消息的一次交换可以在同步系统中发生,仅当满足下列两个条件之一:

⑴预见并可确定两个进程中的哪一个首先发送,哪一个首先接收(在许多情况下,我们不可能预先作出判断,因为,两个进程执行了不同的局部算法);

⑵进程具有这样一种非确定性选择,或者先发送后接收,或者先接收后发送。在每一次执行中,每一个进程选择一个可能执行的次序,即打破进程通信子系统的对称性。

?公平性

分布式系统在某些情况下,有必要限制系统的行为使其各个结点进程获得公平执行,以防止或排除那些总是可用的事件但却始终不发生在系统的变迁中的情况。

定义 2.8一个执行E是弱公平的,如果不存在可应用于无穷多个连续形态而没有在E中发生的事件;(此处主要指没有这样的事件存在,能在无穷多个连续形态下均可以发生,但始终不能发生的事件。)

弱公平的假设可以用一个顾客到餐厅就餐的例子来说明。如果某旅游公司安排了一个旅行团也到该餐厅就餐,而且先于这个顾客到达,那么,由于旅游团是一个整体,尽管有一部分游客晚于该顾客到达餐厅,餐厅也依然不断地为旅游团服务而无法为这个顾客服务。然而,源源不断到达的旅行团的游客就餐时的连续形态也是这个顾客可以进行就餐的形态。在这种情况下,尽管餐厅的服务有其一定的合理性,但系统不满足弱公平性假设。如果系统的设计中可以排除这种情况的发生,那么就称为是满足弱公平性假设条件的。

一个执行E是强公平的,如果不存在可应用于无穷多个形态而没有在E中发生的事件。(此处主要指没有这样的事件存在,能在无穷多个形态中都可以发生

的情况下,却没有能够发生的事件。)

强公平性假设也可以用一个顾客到餐厅就餐的例子来说明。如果来自四面八方的顾客(可视为无穷多个)源源不断地先后到餐厅就餐,尽管有的先于这个顾客到达,有的后于这个顾客到达,但因为某个形态下餐厅可以为这个顾客服务时,由于该顾客的忌口或由于临时上洗手间而不能接受服务,其他情况下餐厅就是不招待这个顾客而是去接待其他顾客,这就太不公平了!因为,在其它无穷多个顾客(无论以何种顺序)就餐的形态下,也是这个顾客就餐事件可以发生的形态。显然,如果系统的设计中可以排除这种情况发生,那么就称为是满足强公平性条件的。换言之,除了旅行团有无穷多的游客源源不断地到达餐厅就餐,而且,中间没有时间间隔导致餐厅无法为这个顾客提供及时的服务这一种情况外,其他情况下这个顾客总是能够得到服务机会的,那么,这个系统满足强公平性假设。

把公平性条件结合到形式模型中是可行的,已经有人做了这样的工作[Manna 和Pnueli,MP88]。但是,把公平性假设放在分布式模型中是否合理存在争议,原因是分布式系统的执行具有不确定性,要求系统满足公平性假设,有可能破坏了系统的自然属性。

2.证明变迁系统的性质

说明一个分布式算法正确地求解了该算法应该求解的某个问题,实际上是要证明这个算法具有某些性质,从而证明这个算法是正确的。而验证一个分布式算法,也就是要证明该算法满足某些应该具有的性质。

分布式算法应该具有的算法性质主要分为两类:

⑴安全性质(相当于顺序算法的部分正确性);

⑵生存性质(活性性质,要说明整个系统还活着,其地位相当于顺序算法中的终止性)。

安全性质要求在系统执行可到达的每一个形态,一个确切的性质对系统的每次执行都必须成立。它强调对系统的每次执行,一个确切的、反映计算正常的性质对该执行到达的每一个形态都必须成立;

生存性质要求在系统执行可到达的某个形态(即观察这个系统是否还“活着”的形态),一个确切的性质对每次执行都必须成立。它强调对系统的每次执行,一个确切的、反映系统还活着的性质在该执行到达的某个观察形态必须成立,系统确实还活着。

下面介绍的验证方法是基于执行可到达的形态断言的真值,这种方法称为断言验证法。

这里证明S的不变量性质,类似于程序正确性证明中的不变式,但此处是在分布式计算模型上讨论问题,那里是建立在程序的结构上。

?安全性质(Safety Properties)

断言是形态集上的一元逻辑函数,即形态集合到真值集合{ true,false }的映射。

一个分布式算法的安全性质的形式为:

“断言P在算法每次执行的每一个形态上为真”。形式上,可以用公式写成

“断言P 总是为真”。证明断言P 总是为真的基本技术是根据下面的定义,说明P 是一个不变量(也称不变式)。

令 γ 为一个形态,P (γ)为一个布尔表达式,其值定义为:

true 如果P 在 γ 成立

P (γ)=

False 否则

这个定义是与给定的变迁系统),,(I C S →=有关的。以后,{ P }→{ Q }表示对S 的每一个变迁δγ→,如果P (γ),则Q (δ)。所以,{ P }→{ Q }的含

义是如果 P 在任意变迁发生前成立,则Q 在该变迁发生后成立。

定义2.9 称断言P 是S 的一个不变量,如果满足:

⑴ ?γ∈I ,P (γ),且

⑵ { P }→{ P }

这个定义的含义是一个不变量在每一个初始形态下成立(即断言为真),且在每一个变迁下保持成立。

根据不变量在每一个可达形态下成立,可以得出下面的定理。

定理2.10 如果P 是),,(I C S →=的一个不变量,则P 对S 的每次执行的每个形态成立。

证明: 设...)(210,,,γγγ=E 是S 的一个执行,用归纳法证明P (γi )对每个i 成立。

首先,由定义2.9的(1),因γ0∈I 而成立。其次,假定P (γi )成立,1+→i i γγ是E 中发生的一个变迁,由定义2.9的(2),P (γi+1)成立。 □

定理 2.10 不是一个充分必要条件的定理。一个断言在每次执行(注:并非所有执行)的每个形态下成立,并不一定是一个不变量(见习题 2.2)。因此,并非每一个安全性质都能用定理2.10证明。然而,每个断言在由一个不变量隐含为真的情况下,可应用定理2.11证明该断言总是为真(但须注意:使用定理找出一个合适的不变量Q 常常是非常困难的)。

定理2.11 设Q 是),,(I C S →=的一个不变量,且假定对每个γ∈C ,Q ? P ,则P 在S 的每次执行的每个形态下成立。

证明:由定理2.10,Q 在每次执行的每个形态下成立,而 Q 蕴涵 P ,则P 在S 的每次执行的每个形态下也成立。 □

有时候,先证明一个弱的不变量,然后使用它来证明一个更强的不变量是比

较有效的。下面的定义和定理说明了我们如何来得到一个更强的不变量。这种方法是一种基本的方法。

定义 2.12设)

C

S→

=是一个变迁系统,P和Q 为断言,称P为Q

(I

,

,

的派生(或称P是由Q导出的),如果

⑴?γ∈I,Q(γ)?P(γ),且

⑵{ Q∧P }→{ Q?P } (→是变迁)

定理2.13设)

=是一个变迁系统,如果Q是一个(弱的)不变量,

C

S→

,

,

(I

P为Q的派生,则P∧Q是S的一个(强的)不变量。

证明:根据定义2.9,我们只要证明下面两条即可:

⑴?γ∈I,Q(γ)∧P(γ),且

⑵{ Q ∧P }→{ Q∧P } (→是变迁)

因Q是一个不变量,?γ∈I,Q(γ)成立,又由P是Q的一个派生,?γ∈I,Q(γ)?P(γ)成立知,对?γ∈I,P(γ)成立,故?γ∈I,Q(γ)∧P(γ)成立。

γ→是变迁系统S的任意一个变迁,且Q(γ)∧P(γ)成立,现在假设δ

因Q是一个不变量,Q(δ)成立,而由P是Q的一个派生以及由定义2.12,我们从

{ Q∧P }→{ Q?P }可以导出Q(δ)?P(δ),据此可断定P(δ)成立,从而得Q(δ)∧P(δ)成立。□安全性质证明的实例请参看3.1节。

?生存性质(Liveness Properties)

引入生存性质的目的主要是要说明分布式系统仍然“活着”,仍在工作。

算法的生存性质在形式上可表示为“断言P在该算法每次执行的某个形态为真”,非形式地也可以表示为“断言最终为真”。用于证明P最终为真的基本技术是范函数和无死锁或正常终止。

设)

S→

,

C

=是一个变迁系统,P是一个谓词。定义term为一个谓词:

(I

,

true 对所有的终止形态

term =

false 对所有的非终止形态

我们考虑这样一种情况或一些情况:一次执行到达一个终止形态。

一方面,当“目标”P(P不为真)没有实现时,通常我们不希望S到达了一个终止形态。在这种不能到达的情况下,称其为死锁的一种说法;另一方面,

如果目标P 实现了(P 为真),我们应该准予终止。在这种情况下,称其为恰当(或正常)终止。

定义2.14 系统),,(I C S →=恰当地终止(或称为无死锁),如果谓词(term ? P )在S 下总是为真。

范函数是良基集上的数学概念。良基集是一个带有偏序关系 ? 的集合,该集合不存在无穷递减序列。(大家可能要回去参考一下集合论或近世代数的概念)

定义2.15 偏序集(W ,?)是一个良基集,如果不存在无穷递减序列:

w 1 ? w 2 ? w 3 ? w 4 ? ?? w i ∈W

我们使用的良基集中的偏序关系是自然数集合上通常的偏序关系,或者使用具有字典次序的自然数集合上的n 元组。引入良基集并利用良基集性质的目的在于证明P 最终为真。为了做到这一点,我们必须证明:

存在一个从形态集合C 到一个良基集W 的函数f ,使得在每一次的执行变迁中f 的值不断递减(这样的系统一定终止)或P 变为真。

定义2.16 设),,(I C S →=和P 分别是给定的变迁系统和断言,由C 到一个良基W 的映射函数f 被称为是(相对于P 的,或记为w.r.t P ,即with respect to P )一个范函数,如果对每个变迁δγ→,)(γf >)(δf ,或P (δ)。

定理2.17 设),,(I C S →=和P 分别是给定的变迁系统和断言,如果S 恰当地终止且一个范函数f (w.r.t P )存在,则P 在S 的每个执行的某个形态下为真。

证明:设),,(I C S →=是一个变迁系统,...)(210,,,γγγ=E 是S 的一次执行。如果E 是有穷的,该执行的最后一个形态必是终止形态。S 恰当地终止,term ? P 在S 下总是为真,这样执行终止时term 为真蕴涵了P 在这个形态成立。如果E 是无穷的,令E ’是E 的不出现P 为真的形态的最长(任意极大)前束(即子元组,可能为无穷)序列,且设s 是在E ’中出现的所有形态序列γi 的范函数值的序列(f (γ0),f (γ1),f (γ2), ??)。由E ’的选择和f 存在及其性质,s 是一个递减序列,因此,由W 的良基集性质,s 是有穷的。这也隐含了E ’是E 的一个有穷的前束序

列)(10k γγγ,,, ,k γ是该执行中的最后一个非终止形态。再据E ’的选择可知,

P (γi+1)成立。 □

如果我们假定系统的公平性性质得到满足,那么,就能从较弱的前提推断P 最终为真。范函数的值也不必随每次变迁递减。公平性假设常可以用来证明包含无穷特定类型的变迁,也就是在无穷执行中证明f 决不会递增,它只可能随这种类型的每次变迁而递减。

定理2.18 如果),,(I C S →=恰当终止且存在一个数k ,使得每个执行至多包含k 个变迁,则P 在每个执行的某个形态下为真。

证明:定理2.18是定理2.17的特殊情况。设),,(I C S →=和P 分别是给定的变迁系统和断言,...)(210,,,γγγ=E 是S 的一次执行。因S 恰当终止且E 中执行的变迁至多为k 个,知E 必为有穷。令E 中最后得到执行的变迁为k k γγ→-1,于是k γ就是终止形态。由term ? P 和term 在k γ时为true ,可得P 在k γ时成立,即P (k γ)=true 。 □

3.事件的因果序次序和逻辑时钟

将分布式算法的行为看成是变迁序列自然涉及到时间。变迁a 比变迁b 早发生,如果在发生的顺序上a 在b 的前面发生。

为了讨论事件之间的因果序关系,对一个执行...)(210,,,γγγ=E ,我们定义相伴事件序列...)(210,,,e e e E =,其中,e i 是将形态由i γ变到1+i γ的事件。按照这种方式,每个执行就确定了唯一的一个事件序列。这样,一个执行就可以设想为下面图中的样子(时空图):

p 1,p 2,??,p N 为进程,E 如上,a ,b ,c ,? 等为事件。如果消息m 在事件s 中被发送而在事件r 中被接收,则从s 到r 画一个前头。(图略)

我们很容易举出例子,说明一个分布式算法的执行中,某些事件的次序可以互换,不会影响该执行后面的形态和结果,而且,在实际的分布式计算中,我们无法找到一个办法,建立全局网上统一的、精确的物理时钟,也无法找到一个办法,建立检测全局网上统一的、精确的物理时钟的检测办法,从而也就难以真正弄清楚各个进程上事件发生的时间和次序。这说明单纯把时间作为总的次序的一种度量并不合适,应该考虑事件之间的因果序依赖关系。

? 事件的独立性与依赖性

分布式系统中的变迁影响而且也仅受到形态的影响。因此,我们要注意相邻事件中形态不相关的那部分,它们是独立的,而且还可能以倒序发生,可以交换发生的次序,并不影响计算的结果。

定理 2.19 令γ为一个具有异步消息传递机制的分布式系统的形态,并设e p 和e q 是两个不同进程p 和q 的事件,它们在γ下都是可应用的,则e p 在e q (γ)下是可应用的,e q 在e p (γ)下也是可应用的,且e p (e q (γ))= e q (e p (γ))。

证明:我们用记号(c ,x ,y ,d)表示每一个事件,这里,c 和d 分别表示事件之前和事件之后的进程状态,x 是事件接收的消息集合,y 是事件发送的消息集合,因此,内部事件(c ,d)用(c ,φ,φ,d)表示;一个发送事件(c ,m ,d)记为(c ,φ,{ m },d),而一个接收事件(c ,m ,d)记为(c ,{ m },φ,d)。按照这种表示的记法,进程p 的事件e =(c ,x ,y ,d)在形态γ=(c p 1,c p 2 ,?,c p ,?,c p N ,M)下是可应用的,如果c p = c 且x ? M 。在此情况下:

E(γ)=(c p 1,c p 2 ,?,d ,?,c p N ,(M - x)∪ y )

现在假定

e p = (b p ,x p ,y p ,d p ) 和e q = (b q ,x q ,y q ,d q ) 在γ= (?,c p ,? ,c q ,?,M) 下是可应用的,即

c p = b p ,c q = b q ,x p ? M ,且x q ? M 。(两个消息可能相同,但目的地标识不同)。

注意到x p 和x q 是不相交的,x p 中的消息(如果有的话)目的地是p ,而x q 中的消息(如果有的话)目的地是q 。

我们记p γ = e p (γ)且注意到p γ =(?,d p ,?,c q ,?,(M- x p )∪ y p ),当x q ? M 且x q ∩ x p = φ时,可推断出x q ? (M- x p ∪ y p ),因此,e q 在p γ下是可应用的。

记pq γ = e q (p γ)且注意到pq γ =(?,d p ,?,d q ,?,(((M- x p )∪ y p )- x q )∪ y q ),由对称性的讨论可以证明:

e p 在q γ= e q (γ)下是可应用的,记qp γ= e p (q γ),且注意到

qp γ =(?,d p ,?,d q ,?,(((M- x q )∪ y q )- x p )∪ y p ),

因为M 是多消息集合,x p ? M ,且x q ? M ,

((M- x p ∪ y p )- x q ∪ y q )=((M- x q ∪ y q )- x p ∪ y p ),

故pq γ = qp γ 。 □ 定理2.19的适用条件

e p 和e q 是一次执行中相继出现的两个事件,即对某个γ,该执行包含子序列 ?,γ,e p (γ),e q (e p (γ)),?

那么,定理2.19 的前提在应用到这些事件时排除了下列两种情况:

⑴ p = q ;或者

⑵ e p 是发送事件,e q 是对应的接收事件。

定理2.19明确地说明了p 和q 必须是不同的进程。如果e q 接收e p 发送的消息,那么,接收事件在e p 的开始形态下是不能应用的,这就说明了如果两个事件在执行中不能交换,那么,这两个事件之间就存在一种因果序关系。这种关系可以扩展为一次执行事件上的偏序,称为执行的因果序。

定义2.20 令E 为一次执行,E 的事件集上称为因果序的关系 ? 是满足下列条件的最小关系:

⑴ 如果e 和f 是同一进程的不同事件,且e 在f 之前出现,则e ? f ;

⑵ 如果s 是一个发送事件,r 是相应的接收事件,s ? r ;

⑶ ? 是传递的。

我们用a ? b 表示(a ? b 或者a = b )。当?是一个偏序时,有可能存在事件a 和b ,既不满足a ? b ,也不满足b ? a ,这样的事件称为是并发的,用a ∥b 来表记。如图2.1中的 b ∥f 和 d ∥l 等。

Lamport1978年首先定义了事件的因果序并在有关的分布式算法的研究中起了重要作用。? 的定义隐含了因果关联的事件之间因果链的存在性,据此,我

们可以说a ? b 隐含了存在一个序列

a = e 0,e 1,e 2,?,e k = b

使得该链中相继出现的每对事件满足定义2.20中的⑴或者⑵,图2.1中a ,f ,g ,h ,j ,k ,l 是一个因果链。

? 执行的等价性:计算

下面考虑这样一个问题:一次执行的多个事件能够以任何与因果序一致的序被重新排序,但不会影响其执行的结果。对事件进行重新排序,会生成不同的形态序列,但只要结果不变,该执行将被视为与原执行等价。

设...)(10,,f f f =是一个事件序列,该序列是一个与执行01(...)F δδ=,,相关联的事件序列。如果对每个i ,i f 在i δ下是可应用的且)(i i f δ=1+i δ。在这种情况下,F 被称为是f 的隐含执行。我们希望f 唯一地确定F ,但实际情况并非总是如此,取决于是否有一致的因果序。如果对某个进程p ,p 中的事件没有一个包含在f 中,那么,p 的状态可以是任意的初始状态。然而,如果f 包含了至少一个p 的事件,则p 中的第一个事件,不妨设为(c ,x ,y ,d),实际上就定义了p 的初始状态将是c 。因此,如果f 至少包含每个进程的一个事件,0δ就将被唯一地确定,而这就唯一地确定了整个执行。

设...)(210,,,γγγ=E 为一次执行,E 的相伴事件序列...)(210,,,e e e E =,且假设事件序列f 是E 的一个置换,即存在非负整数的一个置换σ(或者存在{0,1,2,3,?,k -1}的一个排列,若E 是有k 个事件的有穷执行)使得)(i i e f σ= 。E 的事件的置换),,,(210 f f f f =与因果序是一致的,如果i f ?j f 蕴涵j i ≤,即没有一个事件在序列中排在它按照因果顺序排列的位置前面。

定理 2.21 设),,,(210 f f f f =是...)(210,,,γγγ=E 的伴随事件的一个置换或排列,它与...)(210,,,e e e E =的因果序一致,则f 确定了从E 的初始形态开始的唯一执行F ,F 具有与E 同样多的事件,且若E 是有穷的,那么F 的最后形态与E 的最后形态是相同的。

证明:...)(210,,,δδδ=F 的形态是一步一步构造的。为了构造1+i δ,必须表明i f 在i δ下是可应用的。取00γδ=。假设对所有的j

为了证明c p = c ,我们分两种情况:

情况1. i f 是f 在p 中的第一个事件,则c p 是p 的初始状态,而i f 也是E 在p 中的第一个事件,这就是说c 是p 的初始状态,故c =c p 。

情况2. i f 不是f 在p 中的第一个事件,设i f 之前f 在p 中的最后一个事件

为‘i f =(c ’,x ’,y ’,d ’),则c p = d ’,而‘i

f 也是E 中i f 之前p 中的最后一个事件,这就是说c = d ’,故c =c p 。

注意:我们讨论的‘i

f 是f 在p 中的位于i f 之前的最后一个事件,也是E 中在i f 之前p 中的最后一个事件,关键一点在于p 中。如果不在p 中,而是在另一进程q 中,则将转到q 中的状态上去处理。

为了证明x ? M ,我们注意到对应的发送和接收事件在f 和E 中以相同的序

出现,若i f 不是接收事件,则x = φ且x ? M 显然成立;若i f 是接收事件,令j f 为对应的发送事件,因j f ?i f ,j

至此,我们已经说明了对于每个i ,i f 在i δ下是可应用的,而1+i δ可作为)(i i f δ产生。最后,我们还要证明F 和E 的最后形态相重合,如果E 是有穷的话。

设k γ为E 的最后一个形态,如果E 不包含p 中的事件,则k γ中p 的状态等于它的初始状态,如同f 也不包含p 中的事件一样,k δ(它一步一步由0δ变过来)中p 的状态也等于初始状态,因此,k δ中p 的状态等于k γ中它的状态;否则,k γ中p 的状态是E 在p 中最后事件后面的状态,该事件也是f 在p 中的最后事件,所以,该状态也是k δ在p 中的状态。

k γ中变迁传递的消息确实是那样一些消息,发送消息的事件并不与E 中对应的接收事件匹配,但如同E 和f 包含相同的事件集合一样,相同的消息以变迁的形式都在f 的最后形态中。 □

执行E 和F 隐含具有相同的事件集合,而这些事件的因果序对于E 和F 来说是相同的。因此,E 是F 隐含的事件的一个置换,它与F 的因果序一致,由定理

2.21,称E 和F 是等价执行,记为E ~ F 。

问题:两个等价的执行是否包含相同的事件集合,它们是否包含相同的形态集合?

答:不一定包含相同的事件集合(要放在不同的计算方法上理解,此处等价计算包含相同的事件集合),自然也不一定包含相同的形态集合。如果计算方法相同,则包含相同的事件集合,但不一定包含相同的形态集合,因为有些事件是可以交换执行顺序的。只要初始形态和最终形态相同,两者之间是执行等价的。

注意:进程是局部的概念,而形态才是全局的概念。

~ 显然是一个等价关系,由事件集和这些事件上的因果序可以完整地刻画关

于 ~ 的等价类,这种等价类称为算法的计算,它们完整地刻画了算法所有可能的

执行语义序列(操作语义)和算法的设计。

定义2.22 一个分布式算法的计算是该算法执行(在 ~ 下)的一个等价类。

单纯讨论一个形态是没有意义的,因为计算的不同执行不可能有相同的形态。但讨论一个计算的事件集合是有意义的,因为该计算的所有执行都是由相同的事件集合组成的。

偏序理论的一个结果隐含了对一个计算的一对并发事件来说,每个序都能发生。该扩充在保留原来序关系的前提下,对原来没有偏序关系的元素之间建立了一个偏序关系,见事实2.3。

事实2.3 设(X ,<)为一个偏序,a ,b ∈ X ,满足b ≮ a ,则存在一个<的线性扩充<1,使得a <1 b 。

如果a 和b 是计算C 的两个并发事件,该计算存在两个执行E a 和E b ,使得在E a 中a 先于b 发生,而在E b 中b 先于a 发生,则执行中的进程要确定这两个事件哪个先发生是没有意义的,即不必确定。

? 同步消息传递

类似于定理2.19,我们也可以导出具有同步消息传递功能的分布式系统的定理结论。

定理2.24 令γ为一个具有同步消息传递机制的分布式系统的形态,并设e 1为进程p 和q 的一个变迁,且e 2为不同于p 和q 的进程r 和s 的一个变迁,使得满足e 1和e 2在 γ下是可应用的,则e 1在e 2(γ)下是可应用的,e 2在e 1(γ)下也是可应用的,且e 1(e 2(γ))= e 2(e 1(γ)) 。

证明留给大家。 □ 这个定理的证明类似于定理2.19证明的讨论,但要注意证明中e 1和e 2是两个同步事件,只是它们在两对不同的进程中实现同步,这两对进程不存在进程交叉执行的情况。

? 逻辑时钟

在分布式计算中,我们将时钟表示为一种因果序关系。先引入记号:Θ,它是一个事件集合到偏序集合(X ,<)的映射函数。

定义2.25 时钟是一个从事件集合到偏序集合的映射函数Θ,满足: a ?b ? Θ(a )< Θ(b ) 。

其中,? 是事件集合上的因果序关系,<是并发事件集合上的时钟序关系。

(1) 按顺序排列的次序

设一个执行E 对应的事件序列为...)(210,,,e e e E =,

设Θg (e i )= i ,满足要求。 (2) 实时时钟

可对此模型进行扩充,为每一个进程提供一个硬件时钟。用这种方法,可记录每一个事件发生的真实物理时间,其数值也满足时钟的定义。

注意:实时时钟的分布式系统不适合定义2.6。

(3) Lamport 逻辑时钟

Lamport 提出一个时钟函数,它赋予事件a 长度k ,其中,k 表示最长事件序列(e 1 ,? ,e k )的长度,满足:

e 1 ? e 2 ?? ? e k = a

不难看出,如果a ? b ,该序列可以扩展表示成ΘL (a )< Θ L (b )。ΘL 的值可由一个分布式算法根据下列关系计算得到(见书):

(a) 如果a 是一个内部事件或发送事件,且a ’是同一进程中的前驱事件,则

ΘL (a )= ΘL (a ’) + 1

(b) 如果a 是一个接收事件,a ’是同一进程中的前驱事件,且b 是与a 对

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

网络教育课程考试复习题及参考答案算法分析与设计一、名词解释:1.算法 2.程序 3.递归函数 4.子问题的重叠性质 5.队列式分支限界法 6.多机调度问题7.最小生成树二、简答题: 1.备忘录方法和动态规划算法相 比有何异同?简述之。 2.简述回溯法解题的主要步骤。 3.简述动态规划算法求解的基本要素。 4.简述回溯法的基本思想。 5.简要分析在递归算法中消除递归调用,将递归算法转化为非递归算法的方法。 6.简要分析分支限界法与回溯法的异同。7.简述算法复杂性的概念,算法复杂性度量主要指哪两个方面?8.贪心算法求解的问题主要具有哪些性质?简述之。9.分治法的基本思想是什么?合并排序的基本思想是什么?请分别简述之。10.简述分析贪心算法与动态规划 算法的异同。三、算法编写及算法应用分析题: 1.已知有3个物品: (w1,w2,w3)=(12,10,6),(p1,p2,p3)=(15,13,10),背包的容积M=20,根据0-1背包动态规划的递推式求出最优解。 2.按要求完成以下关于排序和查找的问题。①对数组A={15,29,135,18,32,1,27,25,5},用快速排序方法将其排成递减序。②请描述递减数组进行二分搜索的基本思想,并给出非递归算法。③给出上述算法的递归算法。④使用上述算法对①所得到的结果搜索如下元素,并给出搜索过程:18,31,135。已知,=1,2,3,4,5,6,=5,=10,=3,=12,=5,=50,=6,kijr*r1234567ii1求矩阵链积A×A×A×A×A×A的最佳求积顺序(要求给出计算步骤)。1234564.根据分枝限界算法基本过程,求解0-1背包问题。已知n=3,M=20,(w1,w2,w3)=(12,10,6),(p1,p2,p3)=(15,13,10)。 5.试用贪心算法求解汽车加油问题:已知一辆汽车加满油后可行驶n公里,而旅途中有若干个加油站。试设计一个有效算法,指出应在哪些加油站停靠加油,使加油次数最少,请写出该算法。6.试用动态规划算法实现下列问题:设A和B是两个字符串。我们要用最少的字符操作,将字符串A转换为字符串B,这里所说的字符操作包括:①删除一个字符。②插入一个字符。③将一个字符改为另一个字符。请写出该算法。7.对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径。be2g212ad323182cf2h 8.试写出用分治法对数组A[n]实现快速排序的算法。9.有n个活动争用一个活动室。已知活动i占用的时间区域为[s,f ],活动i,j相容的条件是:sj≥f ii,问题的解表示为(x| x =1,2…,n,),x表示顺序为i的活动编号活动,求一个相容的活动子集,iiii且安排的活动数目最多。xxx10.设、、是一个三角形的三条边,而且x+x+x=14。请问有多少种不同的三角形?给出解答过程。12312311.

北大屈婉玲算法分析与设计 习题解答4

Exercise1 说明:对于算法设计的习题,解题要求如下:先用一段简短的文字说明算法的主要设计思想,其中所引入的符号要给出必要的说明,是否给出伪码根据题目要求确定. 可以调用书上的算法作为子过程,最后对所设计的算法需要给出时间复杂度的分析. 1. 对以下函数,按照他们的阶从高到低排列;如果f (n )与g (n )的阶相等,表示为f (n )=Θ(g (n )). n n n n n n n n n n n n n n n n n n n n n log ,2,,log ,log log ,,,2,)(log ,log , )2/3(,,2,!,1,log ),!log(log 3log log 2log log /12 2. 求解以下递推方程: (1) ?????=++=1 )1(,)4()2()(T c cn n T n T n T 为常数 (2) ???=+=1 )1()log ()2/(5)(2 T n n n T n T 3.设A 是含有n 个元素的数组,如果元素x 在A 出现的次数大于n /2,则称x 是A 的主元素. (1) 对于可排序的数组,设计一个测试算法. (2) 如果A 中元素只能进行“是否相等”的测试,但是不能排序,设计一个算法判断A 中是否存在主元素. 4.设X [0:n ?1]和Y [0:n ?1]为2个数组,每个数组含有n 个已排好序的数。试设计一个O (log n )时间的算法,找出X 和Y 的2n 个数的中位数. 5.设S 是含有n 个数的数组,k 是给定正整数,k i k ,那么就称(i j ,i k )是这个排列的一个逆序. 一个排列含有逆序的个数称为这个排列的逆序数. 例如排列263451含有8个逆序(2,1), (6,3),(6,4),(6,5),(6,1),(3,1),(4,1),(5,1),它的逆序数就是8. 显然,由1,2,…,n 构成的所有n !个排列中,最小的逆序数是0,对应的排列就是12…n ;最大的逆序数是n (n ?1)/2,对应的排列就是n (n ?1)…21. 逆序数越大的排列与原始排列的差异度就越大. 利用二分归并排序算法设计一个计数给定排列逆序的分治算法,并对算法进行时间复杂度的分析.

教科版高中信息技术选修一《算法与程序设计》选修教案.doc

学习必备欢迎下载 第一课初识算法与程序设计 一、教学目标 1、知识与技能 (1)理解算法的概念,培养学生自我探索信息,高效获取信息的能力; (2)能初步利用算法解决简单的问题,培养学生的理论联系实际能力和动 手操作能力。 2、情感、态度、价值观 学生在学习过程中,通过亲身经历体验获得对此算法的感性认识,培养学 生自我获取信息、分析评价信息、、表达呈现信息的能力,进一步提高其信息素养。 二、教学重点难点 重点:算法概念的理解 难点:如何科学合理的选择和设计算法。 三、教学策略与手段 以趣味性问题设置情境,激发学生探索解决问题的兴趣,与学生进行互动 探讨,通过 Flash 演示材料,比较直观地把抽象的问题简单化,使学生的思考 逐步深入,从而总结出算法的概念,学会如何设计和选择算法,培养学生自主 探究学习的能力。 四、教学过程( 1 课时) (一)我们来共同寻找下面一些生活中比较现实的问题的解决方法。 【问题一】天下真的有“不要钱的午餐”吗? 某一餐馆门口海报上写着“不要钱的午餐”,规则如下:在三个月内,来

的顺序都坐一遍,以后来吃饭就可永远免费” 。于是有人想,这太容易了,每人每次坐不同的位置,吃五次不就行了?于是他就叫上自己的朋友参加这项活动,可是,吃了十次之后,还没有吃上免费午餐,这是怎么回事呢? 学生们感觉非常有意思,很快以小组为单位进行热烈的讨论并得出了破解问题 的步骤:①第一个座位5个人都有坐的机会②第二个座位只有4个人中的任一 个有坐的机会(一个人不能同时坐两个座位)③第三个座位只有3个人中的任 一个有坐的机会④第四个座位只有2个人中的任一个有坐的机会⑤第五个座位 只有1个人有坐的机会⑥计算:5×4×3×2×1=120⑦得出结论:需 要吃120次才有可能吃上免费午餐。 【问题二】有三个和尚和三个妖怪过河,只有一条能装下两个人的船,在河的 任何一方或者船上,如果妖怪的人数大于和尚的人数,那么和尚就会有被吃掉 的危险。你能不能找出一种安全的渡河方法呢?请写一写你的渡河方案。学 生:学生讨论回答。 〖展示步骤〗 ①两个妖怪先过河,一个妖怪回来; ②再两个妖怪过河,一个妖怪回来; ③两个和尚过河,一个妖怪和一个和尚回来; ④两个和尚过河,一个妖怪回来; ⑤两个妖怪过河,一个妖怪回来; ⑥两个妖怪过河。 【F lash 动画展示】通过讨论和动画展示,我们可以知道,计算机解决问题和 人解决问题一样需要有清晰的解题步骤。算法就是解决问题的程序或步骤。(二)【课件展示】算法的概念:

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

一。选择题 1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( B )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4、在下列算法中有时找不到问题解的是( B )。 A、蒙特卡罗算法 B、拉斯维加斯算法 C、舍伍德算法 D、数值概率算法 5. 回溯法解旅行售货员问题时的解空间树是( B )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的是( B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 7、衡量一个算法好坏的标准是(C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 8、以下不可以使用分治法求解的是(D )。 A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题 9. 实现循环赛日程表利用的算法是( A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 10、下列随机算法中运行时有时候成功有时候失败的是(C ) A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法 11.下面不是分支界限法搜索方式的是( D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 13.备忘录方法是那种算法的变形。( B )

北大屈婉玲算法分析与设计习题解答5.pdf

Exercise2 要求:对变量给出说明,动态算法要给出优化函数的递推方程、标记函数等,并给出时间复杂度分析。是否需要写伪码,看题目要求。对于给定实例,求出这个实例的解。 1. 有n 个底面为长方形的货柜需要租用库房存放. 如果每个货柜都必须放在地面上,且所有货柜的底面宽度都等于库房的宽度,那么第i 个货柜占用库房面积大小只需要用它的底面长度l i 来表示,i =1, 2, …, n . 设库房总长度是L ,且L l n i i >∑=1. 设库房单位长度的租金是常数c ,如果要求库房出租的收益达到最大,如何选择放入库房的货柜?设计一个算法求解这个问题,给出算法的伪码描述. 2. 设有n 种不同面值的硬币,第i 种硬币的币值是v k (其中v 1=1),重量是w i ,i =1,2,…,n 且现在购有某些总价值为y 的商品,需要用这些硬币付款,如果每种钱币使用的个数不限,问如何选择付款的方法使得付出钱币的总重量最轻?设计一个求解该问题的算法. 假设问题的输入实例是: v 1=1, v 2=4, v 3=6, v 4=8 w 1=1, w 2=2, w 3=4, w 4=6 y =12 给出算法在该实例上计算的备忘录表和标记函数表,并说明付线的方法. 3. 有n 项作业的集合J ={1,2,…,n },每项作业i 有加工时间t (i )∈Z +,效益值v (i ),任务的结束时间D ∈Z +,其中Z +表示正整数集合. 一个可行调度是对J 的子集A 中任务的一个安排,对于i ∈A ,f (i )是开始时间,且满足下述条件: f (i )+t (i )≤f (j ) 或者f (j )+t (j )≤f (i ), j ≠ i i , j ∈A D k t A k ≤∑∈)( 设机器从0时刻开动,只要有作业就不闲置,求具有最大总效益的调度. 给出算法的伪码. 4. 把0-1背包问题加以推广. 设有n 种物品,第i 种物品的价值是v i , 重量是w i ,体积是c i ,且装入背包的重量限制是W ,体积是V . 问如何选择装入背包的物品使得其总重不超过W ,总体积不超过V 且价值达到最大? 5. 有n 个分别排好序的整数数组A 0,A 1, …, A n -1,其中A i 含有x i 个整数,i = 0,1,…,n -1. 已知这些数组顺序存放在一个圆环上,现在要将这些数组合并成一个排好序的大数组,且每次只能把两个在圆环上处于相邻位置的数组合并. 问如何选择这n -1次合并的次序以使得合并时总的比较次数达到最少?

分布式算法导论读后感

《分布式算法导论》读后感 分布式算法20多年来一直是倍受关注的主流方向。本书详细介绍了分布式算法及其理论,结合大量定理、引理、命题等的证明,讨论了点到点消息传递模型上的算法、计算机通信网络中实现的算法,重点是分布式应用的控制算法(如波动算法、广播算法、选举算法、同步系统算法等),还涉及了利用分布式算法实现容错计算、方向侦听和故障检测器等方面的内容。本书条理清晰、深入浅出,适合作为大学本科高年级和研究生的分布式算法课程的教材和参考书,对于具有实践经验的专业人员也大有帮助。 1.为什么看这本书?个人认为是为了学习解决计算机科学普遍问题的方法论。该书的名称就是“导论”,本质上没讲几个算法,而是把900多页(我手头的电子版本)的篇幅都用在了算法证明,推导,分析上了,这些过程才是clrs 希望大家掌握的知识,因为这些知识可以帮你分析远远超过clrs本身的知识体系。这里,大多数同学认为,我不想了解这些玩意,我看clrs,就是为了了解尽可能多算法,其实如果只有这一个目的,给大家推荐一个我经常翻来翻去的一本“书”:《吉大模板》,该书抛弃了clrs中的一切废话,将远远超越clrs 容量的,以少/错一个字都不行的文本描述了大量基础算法。注意:这本书和类似的《浙大模板》(规模更大),《交大模板》(鬼畜版算法集合)在ACM/ICPC 是可以带进场内自由翻阅的,想想为什么一个竞赛在允许这样的同时还受世界各大计算机公司的青睐? 2.虽然凭大家的智商,硬啃本书没问题,但还是建议看本书之前,先把大学相关科目复习一遍。《离散数学》是必须要完全搞定的,要不算法分析部分会让你很抓狂。《数据结构》可以提前剧透clrs的一些基础内容,刚考研的同学们有福了。如果你在本科时选修过组合数学,运筹学等,特定章节你是完全可以直接跳过的,因为你当时学的东西比clrs上那点详细多了。另外,《概率论》,《高数/数分》,《形式语言&自动机》也会有直接的间接的帮助。如果你在大学时不是一心为了刷狗日的保研分,而是认认真真的把上面这些玩意学好,那看clrs基本就是玩票级轻松。 3.为了让自己能答上面试的算法题(不管是下周还是3年后)而看这书的,希望你们考虑下,clrs给你带来了什么?3年前,如果你知道第K大还有O(N)的算法,3-sum还有O(N^2)的,基本上去百度是没啥问题了,但随着这几年程序员面试宝典之类的玩意泛滥,是个CS人就能答的上上面两个问题,面试管问的问题就水涨船高了,具体表现并不是问些clrs上没有的算法,而是clrs上算法的证明,组合和应用(当然狗搜还不厚道的搞起了TAOCP,操他妈的)。或是干脆不问算法了,改问分布式之类的新东西,如果你数据库学的很深,map/reduce 或各种NoSQL上的那些深层次的优化你也可以讲出个大概。总之,不要希望穷举面试官的问题,clrs提供的问题真的不够问。如果说clrs对面试有什么效果,我希望它能帮助你提高自己的分析能力。面试官想看到的是解决问题的能力,不是问题的答案。不要怕面试官考你原题你不会,我实习的时候,经理和我聊起面

OpenJudge算法设计与分析习题解答

1、硬币面值组合 描述 使用1角、2角、5角硬币组成n 角钱。 设1角、2角、5角的硬币各用了a、b、c个,列出所有可能的a, b, c组合。 输出顺序为:先按c的值从小到大,若c相同则按b的值从小到大。 输入 一个整数n(1 <= n <= 100),代表需要组成的钱的角数。 输出 输出有若干行,每行的形式为: i a b c 第1列i代表当前行数(行数从001开始,固定3个字符宽度,宽度不足3的用0填充),后面3列a, b, c分别代表1角、2角、5角硬币的个数(每个数字固定12个字符宽度,宽度不足的在左边填充空格)。

源代码: #include #include int main(){ int t=1; int i,j,k; int n; scanf("%d",&n); int A=n,B=n/2,C=n/5; for(i=0;i<=C;i++){ for(j=0;j<=B;j++){ for(k=0;k<=A;k++){ if(i*5+j*2+k*1==n){ printf("%03d%12d%12d%12d\n",t,k,j,i); t++; } } } } getchar(); return 0; } 2、比赛排名 描述 5名运动员参加100米赛跑,各自对比赛结果进行了预测:A说:E是第1名。 B说:我是第2名。 C说:A肯定垫底。 D说:C肯定拿不了第1名。

E说:D应该是第1名。 比赛结束后发现,只有获第1名和第2名的选手猜对了,E不是第2名和第3名,没有出现名次并列的情况。 请编程判断5位选手各是第几名。 输入 无 输出 输出要求:按ABCDE的顺序输出5行,其中第1行是A的名次,第2行是B的名次,第3行是C的名次,第4行是D的名次,第5行是E的名次。 样例输入 样例输出 源代码: #include int main() { printf("5\n"); printf("2\n"); printf("1\n"); printf("3\n"); printf("4\n"); return 0; } 3、鸡兔同笼 描述 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。

算法与程序设计教案

算法与程序设计思想 【基本信息】 【课标要求】 (一)利用计算机解决问题的基本过程 (1)结合实例,经历分析问题、确定算法、编程求解等用计算机解决问题的基本过程,认识算法和程序设计在其中的地位和作用。 (2)经历用自然语言、流程图或伪代码等方法描述算法的过程。 (4)了解程序设计语言、编辑程序、编译程序、连接程序以及程序开发环境等基本知识。 【学情分析】 高一年级的学生已具备了一定的观察、思考、分析和解决问题能力,也已有了顺序结构、分支结构、循环结构等知识的储备。因此,对于如何将解决问题的思路画成流程图已有一定的基础,但可能还不很熟练,尤其对刚学过的循环结构,教师在课堂上要注意引导。 『此处说“已有了顺序结构、分支结构、循环结构等知识的储备”,应该是指在必修部分对“计算机解决实际问题的基本过程”已有所体验与了解,或是指已学习过数学中相关模块的知识,这是本案例教学得以实施的必不可少的前提条件。』 【教学目标】 1.知识与技能: 建立求一批数据中最大值的算法设计思想,并将算法的设计思想用流程图表示出来。 2.过程与方法: 利用现实生活中比较身高的活动,以及对武术比赛中“打擂台”流程的逐步梳理,让学生学会从此类生活实际中提炼出求最大值的思想方法,即算法思想。 培养学生分析问题、解决问题的能力,让学生学会在面对问题时能梳理出解决问题的清晰思路,进而设计出解决某个特定问题的有限步骤,从而理解计算机是如何解决、处理某种问题的。 『在过程上,通过现实生活中的实例来引导学生总结“求最大值”的算法思想。过程的实现关键在于实例引用是否贴切,是否有利于学生向抽象结论的构建。本案例的实例选择是符合这一要求的。在方法上,注重培养学生分析、解决问题的一般能力,再次体验与理解应用计算机解决问题的基本过程,为后面更一步的学习打下基础,积累信心。』 3.情感态度与价值观:

分布式设计与开发(二)_几种必须了解的分布式算法

分布式设计与开发(二)------几种必须了解的分布式算法 分布式设计与开发中有些疑难问题必须借助一些算法才能解决,比如分布式环境一致性问题,感觉以下分布式算法是必须了解的(随着学习深入有待添加): ?Paxos算法 ?一致性Hash算法 Paxos算法 1)问题描述 分布式中有这么一个疑难问题,客户端向一个分布式集群的服务端发出一系列更新数据的消息,由于分布式集群中的各个服务端节点是互为同步数据的,所以运行完客户端这系列消息指令后各服务端节点的数据应该是一致的,但由于网络或其他原因,各个服务端节点接收到消息的序列可能不一致,最后导致各节点的数据不一致。举一个实例来说明这个问题,下面是客户端与服务端的结构图: 当client1、client2、client3分别发出消息指令A、B、C时,Server1~4由于网络问题,接收到的消息序列就可能各不相同,这样就可能由于消息序列的不同导致Server1~4上的数据不一致。对于这么一个问题,在分布式环境中很难通过像单机里处理同步问题那么简单,而Paxos算法就是一种处理类似于以上数据不一致问题的方案。 2)算法本身 算法本身我就不进行完整的描述和推导,网上有大量的资料做了这个事情,但我学习以后感觉莱斯利·兰伯特(Leslie Lamport,paxos算法的奠基人,此人现在在微软研究院)的Paxos Made Simple是学习paxos 最好的文档,它并没有像大多数算法文档那样搞一堆公式和数学符号在那里吓唬人,而是用人类语言让你搞清楚Paxos要解决什么问题,是如何解决的。这里也借机抨击一下那些学院派的研究者,要想让别人认可你的成果,首先要学会怎样让大多数人乐于阅读你的成果,而这个描述Paxos算法的文档就是我们学习的榜样。 言归正传,透过Paxos算法的各个步骤和约束,其实它就是一个分布式的选举算法,其目的就是要在一堆消息中通过选举,使得消息的接收者或者执行者能达成一致,按照一致的消息顺序来执行。其实,以最简单的想法来看,为了达到大伙执行相同序列的指令,完全可以通过串行来做,比如在分布式环境前加上一个FIFO 队列来接收所有指令,然后所有服务节点按照队列里的顺序来执行。这个方法当然可以解决一致性问题,但

分布式算法设计基础

分布式算法设计基础 课程学时数:每周4学时 Gerard Tel,《Introduction to Distributed Algorithms(Second Edition)》,1999 分布式算法导论(第二版)(英文版) 外语水平高的可以直接用原版教材,其他同学可以中文版为主,参考原版教材。 第一章分布式系统 分布式算法的研究,来源于分布式系统开发活动中的基础研究,其内容构成了分布式计算的核心技术。 1.1什么是分布式系统? 定义.一个分布式系统是指以某种方式合作的若干计算机或处理器上的所有计算机应用。 该定义覆盖:广域计算机通讯网络、局域网、每个处理器具有自己控制部件的多处理器计算机,以及合作、协同处理系统。 术语:“分布式系统”一般是指自治计算机、进程和处理器的集合。作为分布式系统的一个结点,计算机、进程、处理器,每一个都是自治的,它们都必须有自己的控制。 分布式系统与并行计算机体系结构之间的联系: SISD(传统机器,不是); MISD(没有对应的系统); SIMD(不是); MIMD(是): 要求各结点具有并发或并行执行的能力,交换信息的能力。

进程能够起到一个分布式系统结点的作用,单机上的多进程系统是分布式系统的早期雏形,也归属于分布式系统的范畴,是分布式系统的特殊情况。除了单机上的分布式系统之外,大多数情况下,一个分布式系统至少包含n个由通讯硬件互联在一起的处理器,包括现在的多核系统。 在分布式系统中,进程与1980年代早期出现的Agent 之间存在密切的联系,是Agent实现的重要支撑技术。 进程→ Agent(软计算结点)→网络计算→网格计算 ●选择分布式系统的动机 (1)信息交换 (2)资源共享 (3)通过重复提高可靠性 (4)通过并行化提高性能 (5)通过专门化简化设计 (6)问题本身的特点决定 ●计算机网络 计算机网络是用通信机构连接的一个计算机的集合。计算机相互之间能够交换信息。通信机构、计算机集合之间可能分别有层次之分,它们之间的某些互连关系、控制关系等形成了分布式网络体系结构。 计算机网络的类型: 局域网:主要目的是交换信息和协同计算 广域网:主要目的是交换信息和资源共享 两种网络之间并没有严格的界限。从算法的角度看,如果不考虑实现,没有必要严格区分。对分布式算法而言,两种网络可能影响的差别因素主要包括: (1)可靠性参数

北大PKU 慕课 EDX 数据结构与算法 第七章图 quiz答案与解析

第七章树

PROBLEM 2 (1/1 分) 一个深度为h的满k叉树,最多有多少个结点?(独根树深度为0)There is a full k-ary tree, whose depth is h. How many nodes can it have at most? (The depth of a tree, which only has a root node, is 0.) k^(h-1) k^h (k^(h+1)-1)/(k-1) (k^(h+1)-1)/(k-1) - 正确 (k^h-1)/(k-1) Explanation 层数---节点数 number of levels---number of nodes 0---1 1---k 2---k^2 3---k^3 .... h---k^h 所以答案是: so, the answer is: 1+k+k^2+k^3+...+k^h = (k^(h+1)-1)/(k-1)

PROBLEM 3 (1/1 分) 2-3树是一种特殊的树,它满足两个条件: (1)每个内部结点有两个或三个子结点;(2)所有的叶结点到根的路径长度相同; 如果一棵2-3树有9个叶结点,那么它可能有_________个非叶结点。(多项) 2-3 tree is a special kind of tree, it satisfy: (1)Every internal node has 2 or 3 child nodes. (2)All the leaf nodes have the same length of the path to the root node. If a 2-3 tree has 9 leaf nodes, then it may have __________ non-leaf nodes.(There are more than one correct answers) 4, 7, - 正确 4 5 6 7 Explanation 倒数第二层若是3个结点,深度为2,加上根结点,一共4个非叶子结点。 倒数第二层若是4个结点,深度为3,倒数第三层(第二层)有2个结点,一共4+2+1=7个非叶子结点。 If the second level from the bottom has 3 nodes, the depth of tree will be 2, and the tree will has 4 non-leaf nodes, including the root node. If the second level from the bottom has 4 nodes, the depth of tree will be 3, the third level from the bottom will has 2 nodes, and the tree will has 4+2+1=7 non-leaf nodes

高中信息技术算法与程序设计教案沪教版选修1

解析法 一、基本说明 1、教学内容所属模块:信息技术选修1《算法与程序设计》 2、年级:高一年级 3、所用教材出版单位:上海科技教育出版社 4、所属的章节:第三章第一节 5、学时数:45分钟 二、教学设计 1、教学目标: (1)了解解析算法的基本概念。通过实例的学习,掌握用解析算法设计程序的基本思路。 (2)学会根据问题寻找恰当算法和解决问题的方法,并进一步理解分析问题、设计算法、编写程序、调试程序这一用计算机解决问题的过程和方法。 (3)学会合作、交流,培养勇于实践、勤于思考和善于总结的精神和态度。 2、内容分析: 本节内容为用解析法设计程序,解析法是一种最基本的常用算法,在之前三种基本结构程序设计的例题分析中也曾使用过,该算法的分析也为今后的各种算法学习做好了准备。本课教学重点是“理解解析算法的思想,能写出求解问题的解析式并用程序实现”,本课的教学难点是“如何学会分析问题,合理设计算法,建立求解问题的解析式”。 3、学情分析: 学生已经具备了可视化编程的能力及程序设计的基本技能,这样就可以将教学的重点放在算法的分析上,培养学生解决实际问题的能力。 4、设计思路: 本课采用一个测量树高的例子进行引入,用简单的例子分析解析算法,然后采用教材上的活动“求解铁丝问题”让学生掌握解析算法的实现过程,用“求岛屿面积”的实践环节巩固学生的学习。课堂教学中主要采用任务驱动、分析归纳、小组合作、自主探究相结合的学习方法。

题 2’ 从A、B两点仰角的角度与两点之 间的距离可计算出MN的高度。 引出课题:解析法 探究学习 8’[学习任务一] 问题:MN是竖直于地面的物体, 其底部N不可到达。为了测量MN 的高度,在地面上选取一条与MN 在同一平面的水平线线段AB为 基线,测得AB的长为a=20米, 在A点向M点张望的仰角α =38.4°,在B点向M点张望的仰 角β=22.8°。试设计程序计算高 度MN。 要求:完成“学习任务一”(填 写电子文档) 1、问题分析:怎样写出计算表达 式。(请学生回答) 2、设计求解表达式MN=a/(1/tan β- 1/tanα)的算法。 (以下部分小组合作完成) 3、实现应用程序:老师提供程序 的可视化界面及不完整的程序, 要求学生程序填空,完善程序。 4、将程序输入到程序窗体的按钮 中并调试计算本题结果。附带计 算学校中一棵桂花树和一棵龙柏 的高度。 1、由α、β与a 推导出计算表达 式。 2、根据计算表达 式,分析解题算 法。 3、小组合作,填 空完成程序,交流 填空结果。 4、复制程序,调 试并得出运算结 果。 让学生在 老师的带 领下了解 解析法解 题的一般 过程。 学习小结2’老师提问:请同学说说求解任务 一的步骤是怎样的? 老师用流程图表示这个步 骤,提出解析法的概念。 了解解析算法的 概念。 让学生初 步了解解 析算法的 概念。 [学习任务二]求解“铁丝问题” “智力大比拼”活动: (1)一根长为6米,可制作一个 2平方米的矩形框,问该矩形长 和宽各为多少? (2)上面同样的问题,制作的面 积为2.1平方米,那么长、宽各 参与“智力大比 拼”活动。 产生计算机程序 解决问题与简单 人脑思维运算的 比较。 让学生参 与“智力大 比拼”活 动,产生冲 突,激发学 生学习的 兴趣。

北京大学算法设计与分析课09年期末试题

内部资料,转载请注明出处,谢谢合作。 北京大学信息科学技术学院考试试卷 考试科目:算法设计与分析 姓名: 学号: 考试时间:2009年6月9日 任课教师: 以下为试题和答题纸,共 9 页。

一、填空题(选做5道,10分) 1.用矩阵幂的方法求斐波那契数,其运行时间为()。2.对于一个可以用动态规划法求解的问题,要求问题既要满足()的特性,又要具有大量的()。3.对于一个可以用贪心法求解的问题,不仅要求问题满足 ()的特性,还应证明其贪心策略的()。4.设有n个栈操作(PUSH、POP、MULTIPOP )的序列,作用于初始为空的栈S。不区分三种操作,则每个操作的最坏运行时间为(),平摊运行时间为()。 5.三种平摊分析的方法分别为()、()、()。 6.四后问题的搜索空间为()树;0-1背包问题的搜索空间为()树;巡回售货员问题的搜索空间为()树。 7.()法的求解目标是找出解空间树中满足约束条件的所有解,而()法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。 8.回溯法一般以()优先的方式搜索解空间树,而分支限界法则一般以()优先或以最小耗费优先的方 式搜索解空间树。

二、单项选择题(10分) Array 1.下列关于排序算法的叙述,不正确的是?() A) 堆排序的最差情形运行时间为Θ(n lg n) B) 快速排序平均情形运行时间为Θ(n lg n) C) 任何排序算法的最差情形运行时间都不可能比Ω(n lg n)更小 D) 插入排序在最好情形下的运行时间为Θ(n) 2.对于课堂讲解的线性时间内找第i小的元素的算法,() 下列叙述中不正确的是? A) 算法第一步中可以按每五个元素一组找中位数; B) 算法第一步中可以按每七个元素一组找中位数; B) 算法第一步中不能按每三个元素一组找中位数; D) 如果要求的n个元素的中位数,则中位数一定是第一步中找到的中 位数中的某一个。 3.主方法可以求解满足形如下式的递推方程,() A) 对于系数a,必须满足a≥1 B) 对于系数b,必须满足b > 1 C) 若对于常数ε> 0,f(n)=O(n log b a-ε),则T(n)=Θ(n log b a) D) 若f(n)=O(n log b a),则T(n)=Θ(n log b a log n) 4.下列哪些问题不能用贪心法求解?() A) 霍夫曼编码问题B) 单源最短路径问题 C) 0-1背包问题D) 最小生成树问题

算法设计与分析基础课后习题答案

Program算法设计与分析基础中文版答案 习题 5..证明等式gcd(m,n)=gcd(n,m mod n)对每一对正整数m,n都成立. Hint: 根据除法的定义不难证明: 如果d整除u和v, 那么d一定能整除u±v; 如果d整除u,那么d也能够整除u的任何整数倍ku. 对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和r=m mod n=m-qn;显然,若d能整除n和r,也一定能整除m=r+qn和n。 数对(m,n)和(n,r)具有相同的公约数的有限非空集,其中也包括了最大公约数。故gcd(m,n)=gcd(n,r) 6.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次? Hint: 对于任何形如0<=m

设sqrt(x)是求平方根的函数) 算法Quadratic(a,b,c) 描述将十进制整数表达为二进制整数的标准算法 a.用文字描述 b.用伪代码描述 解答: a.将十进制整数转换为二进制整数的算法 输入:一个正整数n 输出:正整数n相应的二进制数 第一步:用n除以2,余数赋给Ki(i=0,1,2...),商赋给n 第二步:如果n=0,则到第三步,否则重复第一步 第三步:将Ki按照i从高到低的顺序输出 b.伪代码 算法 DectoBin(n) .n]中 i=1 while n!=0 do { Bin[i]=n%2; n=(int)n/2; i++; } while i!=0 do{ print Bin[i]; i--; } 9.考虑下面这个算法,它求的是数组中大小相差最小的两个元素的差.(算法略)对这个算法做尽可能多的改进. 算法 MinDistance(A[0..n-1])

对几种典型分布式计算技术的比较

对几种典型分布式计算技术的比较 分布式计算是一门计算机学科,它主要是研究如何把一个需要巨大计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多不同的计算机进行处理,最后把这些计算结果综合起来得到最终的结果。本文还对分布式计算技术的工作原理和几种典型的分布式计算技术,如中间件技术、网格技术、移动Agent 技术、P2P技术以及Web Service技术进行了分析和比较,介绍了存储整合在分布式计算技术中的应用,指出了其存在的一些问题。 1 概述 所谓分布式计算就是在两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。分布式计算研究主要集中在分布式操作系统和分布式计算环境研究两个方面。但随着Internet技术的飞速发展,分布式计算的研究热点也从以分布式操作系统为中心的传统模式转换到以网络计算平台为中心实用分布式技术,并取得了较大的成功。此外,在过去的20多年间也涌现出了大量的分布式计算技术,如中间件技术、网格技术、移动Agent技术、P2P技术以及Web Service技术。它们在特定的范围内都得到了广泛的应用。 2 几种典型的分布式计算技术 2.1中间件技术 中间件(middleware)是一个基础性软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。 在众多关于中间件的定义中,比较普遍被接受的是IDC表述的:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。 中科院软件所研究员仲萃豪形象地把中间件定义为:平台+通信。这个定义限定了只有用于分布式系统中的此类软件才能被称为中间件,同时此定义还可以把中间件与支撑软件和实用软件区分开来。 2.2 网格计算技术 网格计算(Grid computing)通过利用大量异构计算机(通常为桌面)的未用资源(CPU 周期和磁盘存储),将其作为嵌入在分布式电信基础设施中的一个虚拟的计算机集群,为解决大规模的计算问题提供了一个模型。网格计算的焦点放在支持跨管理域计算的能力,这使它与传统的计算机集群或传统的分布式计算相区别。 网格计算的设计目标是解决对于任何单一的超级计算机来说仍然大得难以解决的问题,并同时保持解决多个较小的问题的灵活性。这样,网格计算就提供了一个多用户环境。它的第二个目标就是:更好的利用可用计算机,迎合大型的计算练习断断续续的需求。这隐含着使用安全的授权技术,以允许远程用户控制计算资源。 网格计算包括共享异构资源(基于不同的平台,硬件/软件体系结构,以及计算机语言),这些资源位于不同的地理位置,属于一个使用公开标准的网络上的不同的管理域。简而言之,它包括虚拟化计算资源。网格计算经常和集群计算相混淆。二者主要的不同就是:集群是同

分布式算法

算法设计与分析 SA16011041 楼松豪 分布式算法 1.分析在同步和异步模型下,convergecast算法的时间复杂性 答:引理:在汇集算法的每个容许执行里,树中每个高为t子树根结点在第轮里收到所有孩子的msg。 (1)在同步模型中,最坏情况下,算法每轮只有一个msg传递,而最 大的论数为n-1轮,此时生成树是一条直线,所以时间复杂度为 O(n-1); (2)异步模型中,每个距离pr为t的处理器pi发送的消息至多需要t 时间才能被pr收到,因此与同步模型相同,在最坏情况下,其时 间复杂度为O(n-1),即所有节点都在一条直线上时。 2.证:从pr可达当且仅当它曾设置过自己的parent变量 答:必要性:因为图G是由parent和children确定的静态图,任一节点在收到M后才会加入到图中。即可达节点收到过M,执行了算法2.2的第五行。由于是容许执行的,所以第7行(parent:=j)也会执行。 充分性:若算法2.2的第7行执行过了,因为是容许执行,则必然有第5行也执行过了。即节点收到过M。而M又是从pr发出的,所以该节点是从pr可达的。 3.证明Alg2.3构造一棵以Pr为根的DFS树。 答:证明: (1)连通性:算法2.3构造的图必然是连通的,因为原图是连通的, 反证法:假设pi和pj相邻,pi是从pr可达的,但pj是不可达 的,因为从pr可达当且仅当它曾设置过自己的parent变量,则 pi必设置过自己的parent,而pj的parent=nill,又因为pj属于 pi的unexplored集合,所以pi必会发送M给pj,而pj接收到 M后根据算法将自己parent设置为pi,这与假设矛盾。因此图 连通的。 (2)无环:假设它是有环的,则设环为p1,p2,p3...pi,p1.又设p1是环 中最早收到M的,它的parent为pi,且M会沿着环传递到pi 而pi发送M到p1时,因为parent为非空,会发送reject信息 给pi,因此pi和p1之间不可能有边,所以矛盾。因此,图无 环。 (3)图G是DFS树,只需证明子节点总是先于兄弟节点访问。假设 p1有两个相邻节点p2和p3,且p2无法不经过p1到达p3,当 M第一次到达p1时,根据算法第12行,假设p1先给p2发送 M,根据代码19行,只有当p2的unexplored集为空,即p2给 的所有子节点都发送M后,p2才会给p1发送parent信息,此 时p1才可能给p3发送信息M,因此子节点必优于兄弟节点访 问,因此其为DFS树 4.证明Alg2.3的时间复杂性为O(m)。

分布式计算技术-实验指导书(必修)

《分布式计算技术》实验指导书 实验学时:16 适用专业:计算机科学与技术、计算机软件技术、网络工程等 实验一:Socket程序设计实验 【实验目的及要求】 在Uinx/Linux/Windows 环境下通过socket方式实现一个基于Client/Server 或是P2P模式的文件传输程序。 要求:要求独立完成。 【实验原理和步骤】 1. 确定传输模式:通过socket方式实现一个基于Client/Server或P2P模式的文件传输程序。 2. 如果选择的是Client/Server模式的文件传输程序,则需要分别实现客户端和服务器端程序。客户端:用面向连接的方式实现通信。采用Socket 类对象,接收服务器发送的文件并保存在特定的位置。服务器端:监听客户请求,读取磁盘文件并向客户端发送文件。注意:需要实现文件的读写操作。 3. 如果选择的是P2P模式的文件传输程序,则需要实现一个Peer程序,它即是客户端,也是服务器端。Peer程序需要实现文件上传、下载及文件读写等操作。 【实验任务】 1

1.提交源代码以及实验报告。 实验二:Java RMI实验 【实验目的及要求】 在Java语言环境下,通过RMI实现一个学生成绩或教师信息查询的程序。 要求:要求独立完成。 【实验原理和步骤】 1. 定义学生成绩查询或教师信息查询的远程接口 2. 实现服务器端软件(程序):设计远程接口的实现类和服务器对象类,在服务器上启动目录服务,并注册远程对象,供客户端访问。远程接口的实现类要从本地读取数据信息(成绩或教师信息),数据信息可以存储在文件或数据库中。 3. 实现客户端软件(程序):实现访问远程对象的客户程序。 【实验任务】 1.提交源代码以及实验报告。 实验三:二选一 题目1.实现一个基本的Web服务器程序(独立完成) 【实验目的及要求】 采用Socket API知识和对协议,CGI的理解,实现一个基本的WEB服务器程序,要求服务器能成功响应客户程序发来的GET命令(传送文件),进一步实现响应POST 1