Как я могу использовать strip_tags в обычном коде Ruby (не рельсы)?

Если ваши элементы каким-то образом сопоставимы (тот факт, что порядок имеет какой-либо реальный смысл, равнодушен - он просто должен соответствовать вашему определению равенства), самое быстрое решение для удаления дубликатов собирается сортировать список (0 ( n log (n))), затем выполнить один проход и искать повторяющиеся элементы (то есть равные элементы, которые следуют друг за другом) (это O (n)).

Общая сложность будет O (n log (n)), что примерно совпадает с тем, что вы получите с помощью Set (n times long (n)), но с гораздо меньшей константой. Это связано с тем, что константа в sort / dedup возникает из-за стоимости сравнения элементов, тогда как стоимость из набора, скорее всего, будет результатом вычисления хеша, плюс одно (возможно, несколько) хеш-сравнений. Если вы используете реализацию Set на основе хэша, то есть потому, что Tree based даст вам O (n log² (n)), что еще хуже.

Как я понимаю, однако вам не нужно удалить дубликаты, а просто проверить их существование. Таким образом, вы должны вручную скомпилировать алгоритм сортировки слияния или кучи в своем массиве, который просто выдает возвращаемое значение true (т. Е. «Есть дубликат»), если ваш компаратор возвращает 0 и в противном случае завершает сортировку и проходит проверку отсортированного массива для повторов , В случае слияния или кучи, действительно, когда сортировка будет завершена, вы будете сравнивать каждую повторяющуюся пару, если оба элемента уже не находятся в их конечных положениях (что маловероятно). Таким образом, алгоритм выборочной сортировки должен дать огромное повышение производительности (я должен был бы это доказать, но, я думаю, алгоритм с измененным алгоритмом должен быть в O (log (n)) на равномерно случайных данных)

23
задан the Tin Man 7 August 2014 в 21:44
поделиться