我有(纬度,经度)坐标。
(13.0180552378288,77.6811561227539)
(12.9905166666667,77.7278116666667)
(12.9381400000000,77.7486000000000)
and so on..............there can be upto 100 point
我实际上是在需要k-means
的情况下实施k initial centroids
算法。
我想选择那些k
点,使它们相距最远。
PS。我有一个函数,它占用两个位置并在它们之间给出距离。
提前致谢。
答案 0 :(得分:0)
让我们假设你随机坐在阵列
$random_cordinates = array();
制作另一个用于保存距离的数组,例如
$distnce_array = array();
现在,在foreach循环中,将第一个elemnt与距离的所有其他元素进行比较。并将codinates保存到第三个数组$ distnce_array及其索引和匹配索引 比如,第一次将索引1处的值与所有其他索引进行比较,并且它与第7个元素匹配,因此它就像
$distnce_array[0] => 7;
等等也适用于其他人,但是当移动到下一个索引时,不要比较以前的坐标,比如当你在索引5时不检查0,1,2,3,4等等而且只保存值大于储存的价值。 因为他没有在evey循环后没有比较绳索。
答案 1 :(得分:0)
我强烈怀疑,如果你的目标是
从集合M(| M |> = | N |)中找到一组n个点N,其中 N中点之间的距离之和最大
您可以使用以下算法解决此问题:
false
正确性的直观“证明”是由P分隔的多边形内的任何点与P的成员相比具有比其将替换的P中的点更短的Δ距离。 但是,这不是一个正式的证据。
在PHP中实现算法应该很简单。您可以使用O(n)算法find P - 也可以使用in PHP。然后在最坏的情况下你需要null
来加点(案例3);或Take the bounding-polygon of the global set of points, M
Call the set of points that delimit this polygon P; if
1. |P| = |N|, then you have finished.
All points in P should belong to N
2. |P| > |N|, then you need to discard points from P.
For each point in P,
calculate its score as the delta-sum that it adds to the total.
Remove the lowest-scoring point until you reach |N|
3. |P| < |N|, then you need to add points to P.
For each point in M,
calculate its score as the delta-sum that it would add to the total.
Add the highest-scoring point until you reach |N|
如果您需要丢弃积分(案例2)。