Учитывая два списка A, B цифр. Есть ли лучший способ проверить, равны ли они, чем решение O (N^2).Проверьте, соответствуют ли два списка чисел
ответ
Если вы имеете в виду, что оба списка содержат одни и те же номера, не по отношению к упорядоченности, вы можете использовать следующий O(n *log n)
алгоритм:
- Сортировать обоих списках таким же образом (например, по возрастанию)
- Сравнить результирующие списки по элементам, начиная с
Шаг (1) принимает 2 * O(n *log n) = O(n *log n)
раз. Второй шаг выполняется в линейном O(n)
времени.
Таким образом, работающий выше алгоритм решает вашу проблему в O(n *log n)
времени.
Если числа целые, вы можете использовать алгоритм сортировки по байтам, который имеет временную сложность O (n) (точнее, временная сложность O (n + r), где r - диапазон чисел), уменьшая проблему до O (n) + O (n) + O (n) = O (n) сложность –
Или двоичная сортировка радикса для 'O (n * log (r))', причем 'r' на этот раз является максимальным представимым значением, а чем фактическое максимальное значение. Это можно сделать на месте, что приятно. –
Предполагая, что числа отсортированы в списке, и оба списка имеют одинаковую длину:
bool eq = true;
for (int i = 0; i < list1.length; i++) {
if (list1[i] != list2[i]) {
eq = false;
last;
}
}
Сначала проверьте, если они имеют одинаковую длину. Если они есть, вы можете поместить числа A в HashSet. Перейдите через B и проверьте, есть ли он в HashSet. Если он есть, вы можете удалить его из HashSet. Если в конце HashSet пусто, они равны. Это O (n)
Фактически дубликаты не допускаются в HashSet, поэтому вы можете иметь HashMap с ключом в качестве числа и значения как счетчика. Алгоритм остается прежним. Каждый раз, когда число B встречается в счетчике сокращения HashMap. Если в конце HashMap пуст, они равны. Это также O (n).
Спасибо. Я тоже понял O (n * logn) algo, но мне нравились урс !! –
Спасибо. Мне тоже это нравится :). И это поможет, если вы сможете принять (опять же, только если вам понравилось :)) мой ответ, особенно потому, что (на удивление) никто не поддержал мой :). – user1168577
Отсортировать 2 перечислены O (NlogN)
Затем идут по обоим из них одновременно и видеть, что они содержат одни и те же числа О (п)
Итого: O (NlogN)
- 1. Проверьте, соответствуют ли два математических ответа
- 2. Проверьте, соответствуют ли буквы
- 3. Проверьте, соответствуют ли будущие объекты
- 4. Java. Проверьте, соответствуют ли последние два символа «-1»
- 5. Swift Проверьте, соответствуют ли два объекта, соответствующие протоколу, одинаковым
- 6. Проверьте, соответствуют ли координаты объекта
- 7. Проверьте, соответствуют ли все символы?
- 8. Проверьте, соответствуют ли совпадения паролей
- 9. Проверьте, соответствуют ли даты из списка <Date>
- 10. Проверьте, соответствуют ли 3 значения в массиве?
- 11. Проверьте, соответствуют ли данные ответа Ajax json
- 12. Проверьте, соответствуют ли даты в javascript
- 13. Проверьте, соответствуют ли данные плановому заказу
- 14. Проверьте, соответствуют ли возвращаемые значения запроса Linq
- 15. Проверьте, соответствуют ли значения в массиве jQuery
- 16. Проверьте, нет ли целых чисел
- 17. Проверьте, равны ли два 2D-массива
- 18. Проверьте, слились ли два связанных списка. Если да, то где?
- 19. Проверьте, совпадают ли два связанных списка в java
- 20. Проверьте, имеют ли два списка значения общего доступа в C#
- 21. LINQ: Проверьте, правильно ли два списка один и тот же
- 22. Проверьте, являются ли два вложенных списка эквивалентными при подстановке
- 23. Проверьте, совпадают ли два списка с другим типом
- 24. Проверьте, являются ли два списка четными или нечетными в Prolog
- 25. Проверьте, находятся ли два элемента в наборе в элементе списка
- 26. Сгенерируйте два числа из указанного списка чисел
- 27. Сравните два списка чисел в elisp?
- 28. Проверьте, успешны ли два antcalls
- 29. Проверьте, совпадают ли два клипа?
- 30. Проверьте, установлены ли два вара?
Определите «равный». Тот же порядок? Дублирующие элементы? – SLaks
Вы имеете в виду «есть ли лучший способ проверить, содержат ли они одни и те же номера?» В моем списке книг равенство требует, чтобы числа были одинаковыми и в том же порядке, который, как мне кажется, требует проверки O (n). –
Любые особые характеристики списков? Они отсортированы? Ограничены ли числа? Кроме того, разрешено ли вам использовать непостоянное количество дополнительной памяти? – Jon