Comment trouvez-vous tous les entiers dans une matrice de taille N / k qui apparaissent N / K fois?
-
29-09-2020 - |
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
Je ne pouvais trouver que Cette question, où une solution O (klogn) a été fournie.
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.
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.)