Bombe tomber algorithme

J'ai un n x m matrice composée d'entiers non négatifs. Par exemple:

2 3 4 7 1
1 5 2 6 2
4 3 4 2 1
2 1 2 4 1
3 1 3 4 1
2 1 4 3 2
6 9 1 6 4

"Lâchant une bombe" diminue d'une unité le nombre de la cellule cible et de huit de ses voisins, à moins de zéro.

x x x 
x X x
x x x

Ce qu'est un algorithme qui permettrait de déterminer le nombre minimum de bombes nécessaires pour réduire toutes les cellules à zéro?

B Option (en Raison pour moi de ne pas être un lecteur attentif)

En fait la première version de problème n'est pas celui que je cherche la réponse. Je n'ai pas de lire attentivement l'ensemble de la tâche, il y a des contraintes supplémentaires, nous disons:

Ce sujet de problème simple, lorsque la séquence dans la ligne doit être non-augmentation:

8 7 6 6 5 est possible de séquence d'entrée

7 8 5 5 2 n'est pas possible depuis le 7 -> 8 croissante dans une séquence.

Peut-être trouver réponse pour "plus facile" cas serait de les aider dans la recherche de solution pour la plus dure.

PS: je crois que lorsque l'on a plusieurs mêmes situations nécessitent un minimum de bombes pour effacer la ligne supérieure, vous choisissez l'une que l'utilisation de la plupart des bombes sur le "côté gauche" de la ligne. Encore une preuve que pourrait être correct?

  • Astuce: dans quelles circonstances est une bombe dans un endroit tout aussi bon comme une bombe dans un autre, et peut-être mieux?
  • envisagez-vous gourmand et les déposer dans le plus grand? Parce que cela ne fonctionne pas. Prendre un 1x5 conseil avec 2 2 4 2 2. Seulement de ces endroits, je pense, sont les coins, où vous pouvez mettre une bombe dans la diagonale du voisin, mais qui ne résout pas beaucoup.
  • Bien, je viens de trouver ot que certains champs peuvent être ignorées, comme dans l'exemple 2 3 1 5 Dropant sur 2,3,1 est inutile, parce que tomber sur eux la cause de certains sous-ensemble des dommages qui peuvent nous causer par une chute sur 5. Mais impossible de trouver comment le faire fonctionner à l'échelle mondiale (si c'est de manière correcte). De compensation 2 nécessite l'utilisation de 2 bombes larguées sur l'un de voisin et 5 contenant d'autres ensembles de dommages. Mais alors je ne sais pas quoi faire plus tard, car lorsque vous le réécrire (après la baisse), alors vous avez deux choix (il n'y a pas un super-ensemble de dommages).
  • Grande question. J'ai une idée, je vais essayer avant de poster une réponse.
  • Est-ce un problème NP-difficile, par hasard? Il semble être une variante de la Maximum de Problème de Couverture.
  • Je pense que tu pourrais essayer de chercher le nombre qui a le plus de 1 autour d'elle. Quand il y a 2 nombres avec le même nombre de 1 que vous pourriez trouver celui avec le nombre le plus bas ou à moins de 0 et de répéter.
  • Je soupçonne que l'OP est malveillant gars en essayant de décider si P = NP par le travail des autres. Honte à vous pour essayer de nous tromper, Kostek! 😛
  • Ne peut pas être NP c'est utiliser sur concours (4 tâche -> 5h). Pouvez vous donner le lien vers le contenu si vous comprenez la langue polonaise comme une preuve.
  • Il pourrait être encore NP et faisable. La taille du problème que vous avez donné n'est pas très grand. Il est assez difficile de produire un travail de réponse - laisser un seul qui s'exécute en temps polynomial.
  • Je me demande à quelle vitesse l'algorithme du simplexe irait sur ce type de problème?
  • +1 pour me donner quelque chose d'intéressant à réfléchir
  • Êtes-vous vouloir un code de solution, un Mathématiques expression, ou tout simplement le processus de la pensée?
  • "Une bombe modèle est un terme que je rêvais juste il ya quelques semaines. Il ne veut rien dire, mais vous seriez surpris de voir à quelle vitesse il est pris sur. Pourquoi, j'ai eu toutes sortes de gens convaincus, je pense qu'il est important pour les bombes pour faire exploser près de l'autre et faire une nette photographie aérienne. Il y a un colonel de Pianosa qui n'est guère concerné plus de savoir s'il frappe la cible ou non." Général Peckem, Catch 22.
  • grand problème! Merci de poster le lien.
  • Non, je ne pensais pas frappé-le-haut (qui ne convient pas à ma question). Oui, je pensais les coins, et en fait, ça aide beaucoup.
  • Cela ressemble un peu comme dragueur de mines, à l'exception que vous pourriez mettre à la bombe sur un point plus d'une fois et le nombre seulement d'indiquer le nombre minimum de bombes sur et autour d'un point au lieu de le nombre exact.
  • peut-être vous devriez clarifier, vous l'avez dit, la question est: what's the minimum amount of bombs required to clean the board? cela veut dire qu'il n'est pas forcément nécessaire de trouver un véritable bombardement de modèle, mais juste le nombre minimal de bombes?
  • Est-il un problème à partir d'une certaine ligne juge? Je voudrais essayer de vérifier ma solution.
  • Peut-être que vous avez vu quelque chose que je n'ai pas, mais je suis assez sûr que vous ne pouvez pas trouver le nombre minimal de bombes sans essentiellement avoir calculé le motif réel...
  • Il est assez facile de trouver une limite inférieure et la limite supérieure pour le nombre de bombes, et si ils matches que ça doit être le nombre exact de bombes nécessaires, qui peuvent être trouvés sans calculer le motif réel. Mais cette situation probablement qu'une fois dans une lune bleue, si jamais.
  • Eh bien, exactement. Même si vous pensez plus sophistiqués limites que le immédiatement évidentes (la somme des valeurs/9, la somme des valeurs), ils ne sont pratiquement jamais coïncider. À moins que vos limites sont beaucoup plus sophistiqués, dans ce cas, ils pourraient contribuer à une solution et vous devriez poster une réponse avec des détails.
  • J'ai ajouté une réponse qui décrit ce que je pense, c'est une méthode pour trouver une limite minimale, sans trouver une solution. Lorsqu'il est combiné avec un algorithme glouton, il peut être utilisé pour prouver que la solution trouvée par les cupides, dans ce cas particulier, est en effet une solution optimale.
  • Si à partir d'un concours, quelles sont les limites de ces entrées?
  • Serait intéressé à voir le problème d'origine.
  • Aussi, si votre m et n et les nombres sont tous assez petit, vous pouvez essayer de faire le plein de l'arbre de recherche, qui vous donnera la solution optimale, cependant, il va prendre beaucoup de temps.
  • 2.4 k vues en une seule journée? C'est quelque chose euh?
  • Êtes-vous intéressé dans le problème de décision (c'est à dire, tout en sachant le nombre minimum de bombes requis), ou êtes-vous aussi intéressé par la problème d'optimisation (c'est à dire, sachant que les bombes sont nécessaires, non seulement combien)?
  • ce n'est pas la manière dont la prise/de l'optimisation sont définis. La décision est "pouvez-vous le faire avec moins de k bombes", l'optimisation est "comment quelques bombes faut-il". Ni vous obliger à spécifier la solution complète sauf à titre de preuve.
  • certains gars postes de ses devoirs et obtient une tonne de rep pour elle. 😀
  • 2.4 k est rien. J'ai vu plus de 100k en un jour avant.
  • Pour les gens de jouer avec: jsbin.com/ivaruj/2 (ignorer le code s'il vous plaît, merci)
  • Si de nombreuses réponses... Iwill essayer de reposter autant que possible. Si j'ai omis quelqu'un recomment pls. @Anthony Queen Quoi Que Ce Soit. La cible, c'est que je dois comprendre - pourquoi? Pourquoi certains approche fonctionne, comment faire face à des problèmes similaires et ainsi de suite.
  • La panique ici, vous allez deadline24.pl/assets/Uploads/dl24.elim.Un.2012.pdf Il est polonais tho. Vous pouvez essayer quelques-uns de traduction, mais les effets ne sont pas garantie.
  • Je n'ai trouvé aucun test ni juger sur la page ci-dessus. Mais peut-être tout simplement pas de recherche assez bon.
  • Ewert Conseil d'administration est de 1000x1000 chaque champ de la "santé" ainsi 1000. Pas de limite de temps donnée.
  • Cochez les 3 réponses ci-dessus
  • Le bortsch 4 tâches, 5 heures pour le faire. Les limites ont été donnés 2 post ci-dessus. Doute je peux adapter avec de la mémoire (32 bits de la machine, je crois).
  • Je veux savoir singulier nombre entier de bombes qui sont nécessaires pour diminuer toutes à 0. Le nombre doit être le plus petit possible.
  • Hughes Troll... C'est juste de la préparation aux concours, rien à voir avec l'université.
  • Si de nombreuses réponses que je ne peux pas suivre les lire T. T
  • Aussi comme je l'ai dit sous-optimale n'est pas une option. La réponse doit être exacte, parce que les commentaires étaient binaire 1 (correct), 0(faux).
  • J'ai donner la mise à jour à la tâche oublié une contrainte sequnce en ligne ne serait pas augmenter de manière 8 7 7 6 6 5 3 0 est de ligne valide 4 2 3 2 1 8 7 7 n'est pas valide ligne
  • merci de laisser le problème, tel qu'il a été depuis le cas général, c'est beaucoup plus intéressant. Vous pouvez ajouter une nouvelle contrainte que la partie (b) ou de bonus, ou tout simplement une nouvelle section. Par exemple, demandez-lui: "Bonus: pouvez-vous trouver un algorithme efficace si les lignes sont non-décroissante?"
  • Ok. Je vais le faire.
  • Bien sûr, j'ai été un peu laxiste avec les définitions. Ça dépend, si; souvent, le certificat pour un problème d'optimisation combinatoire est l'affectation de variable, non seulement la valeur de la fonction objectif. Il sonne comme le certificat pour lequel Kostek est intéressée est plus simple (et peut-être prête à une moins complexes en termes de calcul de l'algorithme) que ce que la plupart des réponses ci-dessous supposent.
  • Je ne comprends pas le contraindre. Pouvez-vous expliquer à nouveau s'il vous plaît? Le modifier, je veux dire. ( L'Option B? )
  • pour le B contraindre, c'est que la séquence doit être de baisse, à la fois horizontale et à la verticale ou à l'horizontale est uniquement?
  • Je recommande la suppression de l'option B, il est facile à résoudre comme nneonneo a montré et c'est une distraction de la question d'origine qui a généré une énorme quantité d'intérêt et les réponses. Je pense que vous devriez revenir à la question à sa forme d'origine et de laisser cette bonne conversation continue, même si elle n'est pas à la conversation que vous souhaitez démarrer :).
  • Toute chance vous travaillez pour le Roomba et de la création d'une bombe à s'en décrocher drone de l'armée de l'air?
  • Si une bombe diminue seulement horizontale et verticale voisins et tous les poids sont autorisés (version A), alors le problème est NP-dur, comme l'a démontré dans web.sau.edu/lilliskevinm/wirelessbib/ClarkColbournJohnson.pdf (Théorème 5.1), comme vous pouvez facilement convertir leur grille de graphiques à une matrice à l'aide de 0 et de 1 entrées. Lâchant une bombe est alors équivalente à l'ajout de ce sommet à l'ensemble dominant. Je suis sûr que vous pouvez prouver le cas avec la diagonale voisins NP-dur de la même façon avec quelques modifications.