Existe-t-il un algorithme (efficace) pour sélectionner un sous-ensemble de points dans un ensemble de points ( ) de telle sorte qu'ils "couvrent" la plus grande partie de la zone (sur tous les sous-ensembles possibles de taille )?
Je suppose que les points sont dans un plan 2D.
L'algorithme naïf est simple, mais prohibitif en termes de complexité temporelle:
for each subset of N points
sum distance between each pair of points in the subset
remember subset with the maximum sum
Je recherche une méthode plus efficace voire approximative.
Exemple, voici un avion avec quelques points aléatoires:
Pour , je m'attends à sélectionner des points comme ceux-ci:
Notez que les points sélectionnés (rouges) sont dispersés sur tout le plan.
J'ai trouvé un article " SÉLECTIONNER EFFICACEMENT LES POINTS CLÉS SPATIALEMENT DISTRIBUÉS POUR LE SUIVI VISUEL " qui est lié à ce problème. Cependant, cela suppose que les points sont pondérés.
Réponses:
Voici une solution approximative. Puisque N est si grand et M est si petit, que diriez-vous de ce qui suit:
L'intuition derrière cela est que depuis N >> M , et que vous voulez des points aussi éloignés les uns des autres que possible, ils seront probablement proches des bords des données, vous pouvez donc aussi bien commencer par la coque, puis de manière itérative travaillez votre chemin à partir de là.
De plus, en commençant par la coque, vous réduisez votre recherche initiale de N à N 1/2 .
MISE À JOUR
Si les étapes 3 et 4 ci-dessus prennent trop de temps (puisque vous testez de manière itérative l'intérieur de votre ensemble de données), deux autres idées me sont venues à l'esprit pour accélérer votre problème.
la source
Si nous voulons éviter une sélection prédominante de points à la périphérie, un objectif différent peut s'avérer utile. La maximisation de la distance minimale entre les points est un tel critère. Des problèmes connexes ont été abordés chez StackOverflow , Computer Science SE , Math.SE et MathOverflow .
la source
OK, vous voulez donc sélectionner M points dans un ensemble donné de N points dans le plan euclidien, afin que la somme des distances par paire des points sélectionnés soit maximale, n'est-ce pas?
L'algorithme de recherche locale standard est assez rapide et offre une assez bonne approximation. Le temps d'exécution est linéaire en N et quadratique en M. Son rapport d'approximation est de 1 à 4 / M. Cela signifie que le rapport s'améliore à mesure que M augmente. Par exemple, pour M = 10, elle obtient 60% de la valeur optimale et pour M = 50, elle obtient 92% de la valeur optimale.
L'algorithme fonctionne également pour les espaces euclidiens de dimension générale. Dans ce cas, le problème est NP-difficile. Mais dans l'avion, on ne sait pas s'il est dur NP.
La source est cet article . J'espère que cela t'aides! Bien, Alfonso
la source
Une solution est:
Faites M artificiels, même des points répartis à l'intérieur de ce rectangle englobant, certains M sont plus difficiles que d'autres. Dans votre cas, quatre dans les coins du rectangle et un au centre
la source