到目前为止我最好的镜头:

  

一个递送车辆需要进行一系列的分娩(d <子> 1 ,d <子> 2 ,... d <子>名词),并能以任何顺序这么做 - 换句话说,所有的组d的可能的排列= {d <子> 1 ,d <子> 2 ,... d <子>名词}是有效的解决方案 - 但特定解决方案需要在离开基站在路线(想象包需要在车辆LIFO被加载,例如)的一端之前确定      

此外,各种排列的成本是不一样的。它可以被计算为距离的平方之和d <子>我-1 和d <子> I ,其中d <子> 0 被取为行驶之间基站,需要提醒的是,涉及的成本方向的变化3倍的任何链段(想象这将会对铁路或气动管,和备份破坏其他流量)。

     

给定集的分娩D表示为来自基站的距离(因此abs(d <子> I -d <子>Ĵ )在两个输送之间的距离)和一个迭代permutations(D)其将产生相继每个排列,发现其具有成本小于或等于任何其它排列的排列。

现在,从本说明书的直接实现可能导致这样的代码:

function Cost(D) ...

function Best_order(D)
    for D1 in permutations(D)
        Found = true
        for D2 in permutations(D)
            Found = false if cost(D2) > cost(D1)
        return D1 if Found

这是O(N * N!^ 2),例如很可怕 - 尤其是相比于为O(n的log(n))与人洞察会发现,通过简单地排序d

我的问题:你能拿出一个合理的问题,说明这自然会导致粗心成的更糟的(或不同的可怕)实施的排序算法

有帮助吗?

解决方案

我假设你正在使用这个问题进行采访时看到,如果申请人可以注意到一个看似复杂的问题一个简单的解决方案。

[本假设是不正确 - MarkusQ]

您透露太多的信息。

要解决这个的关键是认识到的点是在一个维度和排序是必需的所有。为了使这个问题更难以隐藏这个事实尽可能的。

最大的线索是距离计算公式。它引入了改变方向的罚款。这使我想到的第一件事情是一个最小化这个点球。以除去罚我有订购它们在某一方向,这个顺序是自然排序顺序。

我会删除的惩罚改变方向,这太过分了白送的。

另一个主要线索是输入值的算法:整数列表。给他们排列的列表,甚至的所有的排列。这将它们备份到认为一个O(N!)算法实际上可能可以预期的。

我将短语它为:

  

鉴于所有可能的列表   的n个递送位置置换,   其中交付每个排列   (d <子> 1 ,d <子> 2 ,...,   d <子>名词)具有由下式定义的代价是:

     

     

返回转置P,使得   P的成本小于或等于任何   其他排列。

所有真正需要做的是读出第一排列和排序。

如果他们构建单个循环比较成本问他们自己的算法的大邻运行时是什么,其中n是(另一陷阱)。

输送位置的数量

其他提示

这是不是一个直接的答案,但我认为还需要更多的澄清。

时d <子> I 允许为负?如果是的话,单独的排序是不够的,据我可以看到。

例如:

d <子> 0 = 0

deliveries = (-1,1,1,2)

看来在这种情况下的最佳路径将被1 > 2 > 1 > -1

编辑:这可能实际上不是最佳路径,但它说明了这一点

您可以改换,具有第一找到的最优解,如

“给我一个证明,下面convination是最优化的以下规则集,其中最佳指所有阶段成本之和最小的多项成果,同时考虑到所有阶段(A..Z)需要出现一次帐户和一次只。

Convination:

A->C->D->Y->P->...->N

阶段成本:

A->B = 5,
B->A = 3,
A->C = 2,
C->A = 4,
...
...
...
Y->Z = 7,
Z->Y = 24."

这应该保持有人忙了一段时间。

此提醒背包问题时,比在TSP更多的我。但是,背包也是一个NP-Hard问题,所以你也许能糊弄人想出利用动态规划,如果他们使用相关的背包你的问题一个在复杂的解决方案。其中基本问题是:

  

可以至少V的值来实现   而不超过重量W?

现在的问题是一个相当好的解决方案可以当V是独一无二的,你的距离,因为这样的发现:

  

在背包问题与每种类型的   具有每一个不同的值项目j   重量(VJ = PJ / WJ)的单位是   考虑一个最简单的   NP完全问题。事实上,实证   复杂度为O的顺序((日志   N)2)和非常大的问题都可以   解决速度非常快,例如2003年   所需的平均时间来解决   与n个实例= 10,000低于14   使用商品个人毫秒   电脑 1

所以,你可能想指出几站/包可能共享相同的VJ,邀请人们想想真的很难解决:

  

然而,在   多个项目的情况下,简并   共享相同的值VJ成为   更难以与极端   其中VJ =常数既然如此   子集和问题具有复杂性   的O(2N / 2N)。

所以,如果你替换每个值的权重,以每个值的距离,并指出一些距离实际上可能有共同的价值观,变质,一些人可能会陷入这个陷阱。

这不只是(NP-硬)旅行推销员问题?这似乎并不可能,你要使它更难。

也许措辞问题,使得实际算法还不清楚 - 例如通过描述的路径为单轨道的铁路线,以便该人将必须从领域知识推断回溯是更昂贵的。

约描述以这样的方式,有人被试探做递归comparisions问题什么 - 例如“你可以加快使用你最好的(到目前为止)成绩最佳的最大集算法”?

顺便说一句,什么是这样做的目的 - 这听起来像意图是折磨采访。

您必须在送货卡车是否有返回基地(使它往返),或不清晰。如果卡车的的回报,然后进行简单排序的产生最短的路线,因为从最远点返回的平方基本成本这么多。失踪的途中一些啤酒花“出”和使用它们的方式回到原来是便宜。

如果你欺骗一个人到一个不好回答(例如,通过不给他们所有的信息),然后是自己的愚蠢或者你的欺骗,才造成了呢?

是多么伟大智者的智慧,如果他们不听从他们的自我的谎言?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top