fork download
  1.  
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5.  
  6.  
  7. int main()
  8. {
  9. float mid(set <float> s);
  10. float dist,dist2,mid1,mid2;
  11. set <float> data;
  12.  
  13. data.insert(2);
  14. data.insert(4);
  15. data.insert(10);
  16. data.insert(12);
  17. data.insert(3);
  18. data.insert(20);
  19. data.insert(30);
  20. data.insert(11);
  21. data.insert(25);
  22.  
  23. set <float> :: iterator itr;
  24.  
  25. cout << "Data = {";
  26. for (itr = data.begin(); itr != data.end(); ++itr)
  27. {
  28. cout<< *itr<<" ";
  29.  
  30. }
  31.  
  32. cout <<"}"<<endl;
  33.  
  34. set<float> cluster1;
  35. set<float>cluster2;
  36. set<float> pre_cluster1;
  37. set<float>pre_cluster2;
  38. cout<<"choose two random median from data: ";
  39. cin>>mid1>>mid2;
  40.  
  41.  
  42.  
  43.  
  44.  
  45. while(1)
  46. {
  47.  
  48. for (itr = data.begin(); itr != data.end(); ++itr)
  49. {
  50. dist = abs(mid1 - *itr);
  51. dist2 = abs(mid2 - *itr);
  52.  
  53. if(dist<dist2)
  54. {
  55. cluster1.insert(*itr);
  56. cluster2.erase(*itr);
  57. }
  58. else
  59. {
  60. cluster2.insert(*itr);
  61. cluster1.erase(*itr);
  62. }
  63.  
  64. }
  65. cout << "k1 = {";
  66. for (itr = cluster1.begin(); itr != cluster1.end(); ++itr)
  67. {
  68. cout<< *itr<<" ";
  69.  
  70. }
  71.  
  72. cout <<"}";
  73. cout << " k2 = {";
  74. for (itr = cluster2.begin(); itr != cluster2.end(); ++itr)
  75. {
  76. cout<< *itr <<" ";
  77.  
  78. }
  79.  
  80.  
  81.  
  82.  
  83. mid1 = mid(cluster1);
  84. mid2 = mid(cluster2);
  85.  
  86. cout<<"} m1: "<<mid1<<" m2: "<<mid2<<endl;
  87.  
  88.  
  89.  
  90. // cout<<"Mids : "<<mid1<<ends<<mid2<<endl;
  91.  
  92. if((cluster1 == pre_cluster1) && (cluster2 == pre_cluster2) )
  93. break;
  94.  
  95. pre_cluster1 = cluster1;
  96. pre_cluster2 = cluster2;
  97. }
  98.  
  99.  
  100.  
  101.  
  102. cout << endl;
  103.  
  104. cout << "\nThe first cluster k1 is : ";
  105. for (itr = pre_cluster1.begin(); itr != pre_cluster1.end(); ++itr)
  106. {
  107. cout<<'\t'<< *itr;
  108.  
  109. }
  110.  
  111. cout << endl;
  112.  
  113. cout << endl;
  114.  
  115. cout << "\nThe second cluster k2 is : ";
  116. for (itr = cluster2.begin(); itr != cluster2.end(); ++itr)
  117. {
  118. cout<<'\t'<< *itr;
  119.  
  120. }
  121.  
  122. cout << endl;
  123.  
  124.  
  125.  
  126. return 0;
  127. }
  128.  
  129.  
  130. float mid(set <float> s)
  131. {
  132.  
  133. float sum =0;
  134. set <float> :: iterator itr;
  135.  
  136. for (itr = s.begin(); itr != s.end(); ++itr)
  137. {
  138. sum += *itr;
  139.  
  140. }
  141.  
  142. return sum/s.size();
  143. }
  144.  
  145.  
  146.  
Success #stdin #stdout 0s 4276KB
stdin
Standard input is empty
stdout
Data = {2 3 4 10 11 12 20 25 30 }
choose two random median from data: k1 = {}  k2 = {2 3 4 10 11 12 20 25 30 }  m1: -nan  m2: 13
k1 = {}  k2 = {2 3 4 10 11 12 20 25 30 }  m1: -nan  m2: 13


The first cluster k1 is : 


The second cluster k2 is : 	2	3	4	10	11	12	20	25	30