J'essaie de classer intelligemment une collection triée. J'ai une collection de éléments de données. Mais je sais que ces données s'inscrivent dans bacs de taille inégale. Je ne sais pas comment choisir intelligemment les points de terminaison pour ajuster correctement les données. par exemple:m
Supposons que j'ai 12 articles dans ma collection et que je sais que les données tiendront dans 3 bacs:
Index: 1 2 3 4 5 6 7 8 9 10 11 12
Value: 1 1 1 3 3 3 3 3 3 5 5 6
Comment choisir intelligemment mes points d'arrêt pour les casiers ?
L'implémentation actuelle que j'ai divise les données en bacs de taille égale, puis prend la moyenne des points d'extrémité pour trouver les index pour la fin des bacs. Donc ça marche comme ça:
Index: 1 2 3 4 5 6 7 8 9 10 11 12
Value: 1 1 1 3 3 3 3 3 3 5 5 6
first break evenly: i = 1-4, 5-8, 9-12
mean endpoints: between 4 and 5: (3+3)/2 = 3
between 8 and 9: (3+3)/2 = 3
Alors maintenant, tout ce qui est inférieur à 3 rentre dans le bac 1, tout ce qui est supérieur à 3 mais inférieur à 3 rentre dans le bac 2, et tout ce qui dépasse 3 rentre dans le bac 3. Vous pouvez voir quel est mon problème. Si les données ont des cases inégales, ma méthode échoue.
Un ami a mentionné l'algorithme du plus proche voisin, mais je ne suis pas sûr.