Question

J'essaie de trouver la solution à ce problème: Comment trouvez-vous tous les entiers dans une gamme de taille N / K qui apparaissent N / K fois dans moins O (klogn) heure?

Je ne pouvais trouver que Cette question, où une solution O (klogn) a été fournie.

Était-ce utile?

La solution

Commençons par le cas $ k= 2 $ et suppose que l'algorithme est basé sur la comparaison.

Je prétends que tout algorithme qui trouve même un seul élément apparaissant $ n / 2 $ temps doit connaître un index $ i $ tel que $ a [i + 1]= a [i + n / 2] $ . En effet, supposons que ce n'était pas le cas, et laissez-nous supposer une simplicité que les entrées de $ a $ sont des nombres réels. Disons que l'algorithme connue les valeurs suivantes: $$ A [i_1]=CDOTS= A [J_1] Il est cohérent avec les connaissances de l'algorithme que $ a [i_1-1] et ainsi de suite, et ainsi de suite, et ainsi de suite, et ainsi de suite Effort Nous pouvons organiser qu'il n'y a pas d'élément qui apparaît $ N / 2 $ fois.

Considérez maintenant la $ N / 2 + 1 $ Tableaux du formulaire suivant: Il y a une course de $ n / 2 $ beaucoup $ 0 $ s commencent à une position $ J \ \ {1, \ ldots, N / 2 + 1 \ \ \ \ \ \ \ \ \ \ \ \ SPAN>, et le reste des éléments sont uniques. Dans chaque tableau de ce type, il y a un choix unique pour l'index $ I $ mentionné ci-dessus. Ainsi, l'arbre de décision représentant l'algorithme a au moins $ n / 2 + 1 $ feuilles, et il doit donc avoir une profondeur $ \ Oméga (\ journal n) $ .


Dans l'affaire Général, l'algorithme doit connaître un index $ i $ tel que $ A [i + 1]= A [i + n / k] $ pour chaque élément qui est sorti. Nous pouvons partager le tableau en $ K / 2 $ parties de taille $ 2n / k $ et envisagez $ (n / k + 1) ^ k $ ^ k $ exemples comme avant, où la $ r $ e élément apparaissant $ n / k $ est dans la $ r $ Cela donne une limite inférieure de $ \ oméga (k \ journal (n / k)) $ , correspondant à votre limite supérieure pour presque toutes les valeurs de $ K $ .

(les algorithmes peuvent probablement être légèrement améliorés pour donner une limite supérieure correspondante.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top