給定一組n
點和n x n
距離矩陣,我該如何精確選擇這些點的k
,以使直徑(任意兩個選定點之間的最大距離)最小化?距離度量服從三角不等式,但不一定是歐氏距離或minkowski距離。我們可以假設所有的距離是兩兩不同的。選擇具有最小可能直徑的k個點
此外,我想解決這個問題的範圍內的所有k值n - 1, n - 2, ... n - d
。我知道這可以做得比檢查每個k
的所有n choose k
組合更快,但我提出的解決方案仍然不是很有效率(我很確定多項式時間解決方案不存在,但我想知道是否有可能做得更好)。
我唯一的方法是遞歸的。找到它們之間距離最大的兩個點p1
和p2
(首先按距離對所有對進行排序)。然後k = n - 1
案例是由所有點減去p1或p2組成的集合之一。一個可能比另一個更好,或者可能是平局。 k < n - 1
的所有解決方案必須是其中一個集合的子集(不能同時包含p1和p2),但不一定是獲勝的解決方案。繼續檢查這兩組的子集。我認爲這是類似於O(n^2 log n + 2^d)
,但這仍然比檢查每個k
到n - d
的所有組合都要好,只要d
足夠小(我認爲至少爲k/2
)。
一個相關的問題 - 找到直徑不大於t
的最大子集 - 等於independent set problem(以距離大於t
的邊緣爲邊界的圖),但這已知爲NP-hard。
這些解決方案都沒有利用三角形不等式,這給我留下了一點希望,即存在更有效的解決方案。