Un conférencier a donné à cette question en classe: [question]Comment cette solution est-elle un exemple de programmation dynamique?
Une séquence de nombres entiers n est stocké dans un tableau A [1..n]. Un entier a en A est appelé la majorité si elle apparaît plus à n/2 fois dans A.
Un algorithme O (n) peut être conçu pour trouver la majorité sur la base du suivant observation: si deux différents éléments de la séquence originale sont supprimés, puis la majorité dans la séquence originale reste la majorité dans la nouvelle séquence . En utilisant cette observation, ou autrement, écrire le code de programmation à trouver la majorité, s'il en existe, en O (n) temps.
pour laquelle cette solution a été acceptée [solution]
int findCandidate(int[] a)
{
int maj_index = 0;
int count = 1;
for (int i=1;i<a.length;i++)
{
if (a[maj_index] == a[i])
count++;
else
count--;
if (count == 0)
{
maj_index =i;
count++;
}
}
return a[maj_index];
}
int findMajority(int[] a)
{
int c = findCandidate(a);
int count = 0;
for (int i=0;i<a.length;i++)
if (a[i] == c) count++;
if (count > n/2) return c;
return -1;//just a marker - no majority found
}
Je ne vois pas comment la solution fournie est une solution dynamique. Et je ne vois pas comment, sur la base du libellé, il a sorti ce code.
La question est plutôt générale. Incluez votre raisonnement pourquoi ce n'est pas une solution dynamique pour donner aux gens quelque chose à répondre. – JOTN
Cette programmation n'est pas dynamique. Et je ne vois personne (y compris votre professeur) le dire, sauf dans le titre de votre question. –
Keith, mon professeur a dit que c'est dynamique, je n'ai pas tiré la question (et la solution) de l'éther Internet. – Irwin