这个问题叫什么名字?

时间:2009-07-03 12:56:44

标签: algorithm geometry

您将获得一行中各点之间的距离列表。

例如:

  • 100之间的a和b
  • 20在c和b之间
  • 90在c和d之间
  • 170之间的a和d

返回它们出现在线上的点的排序序列,它们之间的距离为:

例如上面的输入产生: 一个< ---- 80 -----> c< ---- 20 ------> b< ---- 70 -----> d或相反的顺序(无关紧要)

这个问题叫什么?我想研究一下。

如果有人知道,那么为此实现了哪些可能的渐近运行时间?

5 个答案:

答案 0 :(得分:4)

不确定它有名字;更正式地说,它将是:

|a-b| = 100
|c-b| = 20
|c-d| = 90
|a-d| = 170

其中|x|代表x的absolute value

就广义系统而言,如果你有N个具有k个未知数的类型的方程,你有N个符号选择。在不失一般性的情况下(因为任何解决方案产生具有反向排序的第二解决方案),您可以选择第一个方程的符号,以及其中一个未知数的特定值(因为整个事物可以左右滑动到位)。然后你有剩余方程的2 N-1 可能性,你所要做的就是通过它们看看哪些有解决方案。因为系数都是+/- 1并且每个方程都有2个未知数,所以你只需逐个浏览它们:

Step 1: Without loss of generality, 
  choose a sign for one equation
  and pick a value for one unknown:
a-b = 100, a = 0

Step 2: Choose signs for the remaining absolute values.
a = 0
a-b = 100
c-b = 20
c-d = 90
a-d = 170

Step 3: go through them one by one to solve / verify there aren't conflicts 
(time = N steps).
0-b = 100  =>  b = -100
c-b = 20   =>  c = -80
c-d = 90   =>  d = -170
a-d = 170  =>  OK        => (0,-100,-80,-170) is a solution

Step 4: if this doesn't work, go back through the possible choices of sign 
and try again, starting at step 2.

Full set of solutions is (0,-100,-80,-170) 
and its negation (0,100,80,170) and any number x<sub>0</sub> added to all terms.

因此运行时的上限是O(N * 2 N-1 )≡O(N * 2 N )。

我想可能会有一条捷径,但没有明显的想法。

答案 1 :(得分:2)

如上所述,您的问题只是一个非线性方程组(用绝对值或二次方程表示)。然而,它看起来类似于寻找哥伦布统治者或完美统治者的问题。

如果您将约束视为二次方程,例如。 (a-b)^ 2 = 100 ^ 2,那么你可以将其表述为二次规划问题,并使用一些经过充分研究的技术来解决这类问题。

答案 2 :(得分:1)

考虑到每个细分X[i] -> X[i+1]方向的符号,它变为boolean satisfiability problem。我看不出明显的简化。运行时为O(2 ^ N) - 特别是2 ^(N-2)次测试,N值和O(1)表达式进行测试。

假设a = 0并确定a -> b的方向:

a = 0
b = 100
c = b + 20 X[0] = 100 + 20 X[0]
d = c + 90 X[1] = 100 + 20 X[0] + 90 X[1]
test d == 170

其中X[i]为+1或-1。

虽然d的表达式似乎需要O(N)运算((N-2)次乘法和(N-2)次加法),但通过使用Gray code或其他此类机制来改变仅状态一次X一次,因此每次测试的成本可以是O(1)。 (虽然N = 4可能不值得)

如果你有更多的约束而不是积分可能会出现简化 - 如果给你|b-d| == 70,那么你只需要测试两个而不是四个 - 基本上b,c和d成为他们自己完全约束的子问题

三角属性

也可能会产生简化 所有a,b和c的

| |a-b| - |b-c| | <= |a-c| <= |a-b| + |b-c|

因此,如果您有多个点,并且您知道在给定对X进行分配的情况下,点之间的距离总计达到某个点,并且该总数远离目标值而不是总距离之间的距离。剩余的点数,你可以推断出没有剩下的点的任务组合将起作用。

答案 3 :(得分:0)

...代数

或者它可能是旅行商问题的简化

答案 4 :(得分:0)

我没有方便的算法书,但这听起来像路径受约束的graph search problem。您可以使用Dijkstra's Algorithm或其中的某些变体。