|
@@ 250-268 (lines=19) @@
|
| 247 |
|
return candidate_maximum_distance; |
| 248 |
|
|
| 249 |
|
|
| 250 |
|
def __merge_by_signle_link(self): |
| 251 |
|
"""! |
| 252 |
|
@brief Merges the most similar clusters in line with single link type. |
| 253 |
|
|
| 254 |
|
""" |
| 255 |
|
|
| 256 |
|
minimum_single_distance = float('Inf'); |
| 257 |
|
indexes = None; |
| 258 |
|
|
| 259 |
|
for index_cluster1 in range(0, len(self.__clusters)): |
| 260 |
|
for index_cluster2 in range(index_cluster1 + 1, len(self.__clusters)): |
| 261 |
|
candidate_minimum_distance = self.__calculate_nearest_distance(index_cluster1, index_cluster2); |
| 262 |
|
|
| 263 |
|
if (candidate_minimum_distance < minimum_single_distance): |
| 264 |
|
minimum_single_distance = candidate_minimum_distance; |
| 265 |
|
indexes = [index_cluster1, index_cluster2]; |
| 266 |
|
|
| 267 |
|
self.__clusters[indexes[0]] += self.__clusters[indexes[1]]; |
| 268 |
|
self.__clusters.pop(indexes[1]); # remove merged cluster. |
| 269 |
|
|
| 270 |
|
|
| 271 |
|
def __calculate_nearest_distance(self, index_cluster1, index_cluster2): |
|
@@ 208-226 (lines=19) @@
|
| 205 |
|
self.__centers.pop(indexes[1]); # remove merged center. |
| 206 |
|
|
| 207 |
|
|
| 208 |
|
def __merge_by_complete_link(self): |
| 209 |
|
"""! |
| 210 |
|
@brief Merges the most similar clusters in line with complete link type. |
| 211 |
|
|
| 212 |
|
""" |
| 213 |
|
|
| 214 |
|
minimum_complete_distance = float('Inf'); |
| 215 |
|
indexes = None; |
| 216 |
|
|
| 217 |
|
for index_cluster1 in range(0, len(self.__clusters)): |
| 218 |
|
for index_cluster2 in range(index_cluster1 + 1, len(self.__clusters)): |
| 219 |
|
candidate_maximum_distance = self.__calculate_farthest_distance(index_cluster1, index_cluster2); |
| 220 |
|
|
| 221 |
|
if (candidate_maximum_distance < minimum_complete_distance): |
| 222 |
|
minimum_complete_distance = candidate_maximum_distance; |
| 223 |
|
indexes = [index_cluster1, index_cluster2]; |
| 224 |
|
|
| 225 |
|
self.__clusters[indexes[0]] += self.__clusters[indexes[1]]; |
| 226 |
|
self.__clusters.pop(indexes[1]); # remove merged cluster. |
| 227 |
|
|
| 228 |
|
|
| 229 |
|
def __calculate_farthest_distance(self, index_cluster1, index_cluster2): |