高级算法-题解1


在AOE网中,从源点到汇点的所有路径中,具有最大路径长度的路径成为关键路径。在AOE网中,可以有不止一条的关键路径。




旅行商问题(Traveling Saleman Problem,TSP)


什么是旅行商问题

旅行商问题(Traveling Saleman Problem,TSP)是VRP的特例,由于 Gaery  [1]已证明TSP问题是 NP难题,因此,VRP也属于NP难题。

旅行商问题(TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有


给定的需求点之后,最后再回到原点的最小路径成本。最早的旅行商问题的数学规划是由Dantzig(1959)等人提出 [2]


TSP问题在 物流中的描述是对应一个物流配送公司,欲将n个客户的订货沿最短路线全部送到。如何确定最短路线。

TSP问题最简单的求解方法是枚举法。它的解是多维的、多局部极值的、趋于无穷大的复杂解的空间,搜索空间是n个点的所有排列的集合,大小为(n-


1)。可以形象地把解空间看成是一个无穷大的丘陵地带,各山峰或山谷的高度即是问题的极值。求解TSP,则是在此不能穷尽的丘陵地带中攀登以达到


山顶或谷底的过程。


旅行商问题的历史


旅行商问题字面上的理解是:有一个 推销员,要到n个 城市推销商品,他要找出一个包含所有n个城市的具有最短路程的环路。

TSP的历史很久,最早的描述是1759年欧拉研究的骑士周游问题,即对于国际象棋棋盘中的64个方格,走访64个方格一次且仅一次,并且最终返回到起


始点。TSP由美国RAND公司于1948年引入,该公司的声誉以及线性规划这一新方法的出现使得TSP成为一个知名且流行的问题。


旅行商问题的解法

旅行推销员的问题,我们称之为巡行(Tour),此种问题属于NP-Complete的问题,所以旅行商问题大多集中在启发式解法。 Bodin(1983)等人将旅行

推销员问题的启发式解法分成三种:


从距离矩阵中产生一个近似最佳解的途径,有以下几种解法:


1) 最近邻点法(Nearest Neighbor Procedure):一开始以寻找离场站最近的需求点为起始路线的第一个 顾客,此后寻找离最后加入路线的顾客最近的

需求点,直到最后。

2) 节省法(Clark and Wright Saving):以服务每一个节点为起始解,根据三角不等式两边之和大于第三边之性质,其起始状况为每服务一个顾客后便

场站,而后计算路线间合并节省量,将节省量以降序排序而依次合并路线,直到最后。

3) 插入法(Insertion procedures):如最近插入法、最省插入法、随意插入法、最远插入法、最大角度插入法等。


先给定一个可行途程,然后进行改善,一直到不能改善为止。有以下几种解法:


1)K-Opt(2/3 Opt):把尚未加入路径的K条节线暂时取代目前路径中K条节线,并计算其成本(或距离),如果成本降低(距离减少),则取代之,直到

无法改善为止,K通常为2或3。

2)Or-Opt:在相同路径上相邻的需求点,将之和本身或其它路径交换且仍保持路径方向性,并计算其成本(或距离),如果成本降低(距离减少),则

取代之,直到无法改善为止。


先由途程建构法产生起始途程,然后再使用途程改善法去寻求最佳解,又称为两段解法(two phase method)。有以下几种解法:


1)起始解求解+2-Opt:以途程建构法建立一个起始的解,再用2-Opt的方式改善途程,直到不能改善为止。

2)起始解求解+3-Opt:以途程建构法建立一个起始的解,再用3-Opt的方式改善途程,直到不能改善为止。





答案:C

buddy内存分配算法

1、优缺点

1)、 一个很小的块往往会阻碍一个大块的合并,一个系统中,对内存块的分配,大小是随机的,一片内存中仅一个小的内存块没有释放,旁边两个大的

就不能合并。

2)、 算法中有一定的浪费现象,伙伴算法是按2的幂次方大小进行分配内存块,当然这样做是有原因的,即为了避免把大的内存块拆的太碎,更重要的

是使分配和释放过程迅速。但是他也带来了不利的一面,如果所需内存大小不是2的幂次方,就会有部分页面浪费。有时还很严重。

3)、 另外拆分和合并涉及到 较多的链表和位图操作,开销还是比较大的。

2、 Buddy(伙伴的定义):


这里给出伙伴的概念,满足以下三个条件的称为伙伴:

1)两个块大小相同;

2)两个块地址连续;


3)两个块必须是同一个大块中分离出来的;

3、Buddy算法的释放原理:


内存的释放是分配的逆过程,也可以看作是伙伴的合并过程。当释放一个块时,先在其对应的链表中考查是否有伙伴存在,如果没有伙伴块,就直接把


要释放的块挂入链表头;如果有,则从链表中摘下伙伴,合并成一个大块,然后继续考察合并后的块在更大一级链表中是否有伙伴存在,直到不能合并


或者已经合并到了最大的块(2*2*2*2*2*2*2*2*2个页面)。

整个过程中,位图扮演了重要的角色,如图2所示,位图的某一位对应两个互为伙伴的块,为1表示其中一块已经分配出去了,为0表示两块都空闲。伙

伴中无论是分配还是释放都只是相对的位图进行异或操作。分配内存时对位图的是为释放过程服务,释放过程根据位图判断伙伴是否存在,如果对相应

位的异或操作得1,则没有伙伴可以合并,如果异或操作得0,就进行合并,并且继续按这种方式合并伙伴,直到不能合并为止。




base为段的基地址,是线性地址空间中段的起始地址 limit是段的界限




答案:B

前缀码

. 设Q ={a1, a2, …, am}是一个0~1序列集合 .  如果Q中没有一个序列是另一个序列的前缀 , 则称Q为前缀码.

例如,{0,10,110}就是一个前缀码,而{0,10,101}就不是前缀码。

根据定义可知:B中有序列是另一个序列的前缀,可知错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhisheng_blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值