解决NP问题——旅行商问题的一点思路之二

 

 这是接着上一篇说写的,在这里,我们先证明出常规算法和贪心算法和遗传算法的效率。

常规算法:

我们排列出来所有的路径,然后我们在选择出来所需的路径,这个我们假设有N个地点,再加上这个图是一个完全图,就代表每个节点都是含有N-1条边,我们摆列所有的路径,这个是N!,这个在《计算机程序设计艺术》卷一中有过证明,这个约等于2的根号下n次方!不是多项式时间内可以解决的。

贪心算法:

我们还是假设我们只是贪最小的路径,我们有N个地点,每个有N-1条边,那么,我们只要执行N*(N-1)步,乍一看,这个问题好像是解决的,但是,我们不能保证我们所选择的是最优的路径,我们可以加上一个限制条件,我们还是在选择的时候,为每个其他的没有选择的路径记录下来所走过的路程,但是,这个条件还是和第一个算法还是差不多的,我们为所剩下的N-1条边都加上所有的边,那么这个就变成了比常规算法还要麻烦的了!不知道谁还有更好的约束条件,望赐教。

遗传算法:

我们知道我们杂交出来的染色体是有N-1条边的,那么,我们知道从售货员开始的顶点到再回到这个顶点,就是走了N-1条路径,但是任意两个城市之间还是有N-1条边,杂交产生的你所需要的边的概率是N-1,那么,我们我们一共有N-1条边,只要杂交(N-1)(N-1)次,我们就能得到我们想要的路径,但是,我们假设产生了两个染色体,每次杂交就是和整个图的随机的一个边杂交,然后保存这个染色体,每次杂交都会产生两个新的染色体,如何直选到了一个染色体,第一次选择的概率是1/2,第二次选择的概率是1/4,第三次选择二概率是1/6,一次类推,这样我们可以知道了一个乘积公式,就是表示这个概率的总和,为1/2*1/4*......*1/(2的N-1次方) = A(n),但是,我们还得保证不会交换已经选择好的染色体,我们已经产生第一个染色体的时候,就是有了N-1条边,那么只有一条边符合在我们的染色体里,我们还是那么选择不不到的概率是(N-2)/(N-1),如果已经选择到第二个符合的边,那么就变成了(N-3)/(N-1),一次类推,这个也是相乘的,我们假设这个乘积为C(n),杂交一次所以产生一条符合的染色体是(1/(N-1)(N-1))* A(n)*C(n),那么,一共需要杂交多少次才能产生一个符合条件的染色体呢,这个恐怕是前面这个的倒数!

 

总的来说,这个还不是很理想,我会在下面在定点优化,我还会增加一些限制条件来缩小选择的范围,或者是单单只是选择到了一个染色体,而不是从众多染色体中选择一个染色体!

你可能感兴趣的:(c,算法,优化)