متوسط ​​المسافة بين النقاط في الكتلة

StackOverflow https://stackoverflow.com/questions/1655840

  •  11-09-2019
  •  | 
  •  

سؤال

يبدو أنني حصلت على المفهوم ولكن لا يمكن أن يبدو أنه يحصل على التطبيق الصحيح. EI لديك كتلة (قائمة صفيف) مع نقاط متعددة، وأريد حساب مسافة AVG. السابقين: النقاط في الكتلة (A، B، C، D، E، F، ...، N)، المسافة AB، المسافة AC، مسافة الإعلان، ... المسافة A، N، المسافة (B، C) المسافة ( ب، د) ... المسافة (ب، ن) ...

شكرا مقدما.

هل كانت مفيدة؟

المحلول

لا تريد أن تضع ضعف أي شريحة، لذلك يجب أن تكون خوارزميةك مزدوجة للحلقة. ينتقل الحلقة الخارجية من A إلى M (لا تحتاج إلى التحقق من N، لأنه لن يكون هناك شيء تركه مقابل الاتصال به)، في كل مرة تحلق من Curpoept to n، حساب كل مسافة. تضيف كل المسافات، وتقسيم عدد النقاط (N-1) ^ 2/2. يجب أن تكون بسيطة جدا.

لا توجد خوارزميات قياسية للتحسين على ذلك أنني أدرك ذلك، وهذا ليس مشكلة مدروسة على نطاق واسع. أعتقد أنه يمكنك الحصول على تقدير معقول جدا (إذا كان تقدير مفيد) من خلال أخذ العينات مسافات من كل نقطة إلى حفنة من الآخرين. ولكن هذا هو تخمين.

(بعد رؤية مثال التعليمات البرمجية الخاصة بك) هنا حاول آخر:

Public Double AvgdistanceinCluster () {double totdistance = 0.0؛ ل (INT I = 0؛ أنا <bigcluster.length - 1؛ i ++) {for (int j = i + 1؛ j <bigcluster.length؛ j ++) {totdistance + = المسافة (bigcluster [i]، bigcluster [j] ) }} العودة Totdistance / (BigCluster.length * (BigCluster.length - 1)) / 2؛ }

لاحظ أن الحد الأقصى للحلقة الأولى مختلفة. المسافة بين نقطتين ربما sqrt((x1 - x2)^2 + (y1 -y2)^2).

نصائح أخرى

شكرا على كل المساعدة، وأحيانا بعد شرح السؤال في المنتدى إجابة فقط منبثق في عقلك. هذا هو ما ينتهي به الأمر.

لدي مجموعة من النقطة، وأحتاج إلى حساب مسافة AVG النقاط (أزواج) في المجموعة. لذلك، هذا ما فعلته. أنا متأكد من أن شخصا ما سيأتي بأجابة أفضل إذا كان الأمر كذلك، يرجى إسقاط ملاحظة. شكرا مقدما.

/**
 * Calculate avg distance between points in cluster
 * @return
 */
public double avgDistanceInCluster() {
    double avgDistance = 0.0;
    Stack<Double> holder = new Stack<Double>();
    for (int i = 0; i < cluster.size(); i++) {
        System.out.println(cluster.get(i));
        for (int j = i+1; j < cluster.size(); j++) {
            avgDistance = (cluster.get(i) + cluster.get(j))/2; 
            holder.push(avgDistance);
        }
    }
    Iterator<Double> iter = holder.iterator();
    double avgClusterDist = 0;
    while (iter.hasNext()) {
        avgClusterDist =+ holder.pop();
        System.out.println(avgClusterDist);
    }
    return avgClusterDist/cluster.size();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top