Я хочу знать, почему, находя два одинаковых элемента в одном массиве, нижняя граница n log n
. Я понятия не имею об этом.Найти два равных элемента в одном массиве
ответ
В худшем случае два одинаковых элемента всегда могут быть последними, на которые вы смотрите. Без какого-либо заказа вам нужно сравнить каждый элемент с каждым элементом. O (N^2).
Ну, нам не нужно быть таким глупым. Разумеется, мы можем добавить порядок, отсортировав массив: O (nlog (n)). А после этого просто пройдите через массив и найдите два с одинаковым значением O (n).
Лучше тогда это трудно сделать, что делает нижнюю границу O (nlog (n)).
Хм .. Это не доказательство. Конечно, мы могли бы сортировать массив и находить их, но внезапно мы могли бы найти их быстрее. Думаю, это непростая проблема. Я мог бы задать еще один вопрос. Если я могу найти два равных элемента в массиве быстрее n log n, я могу доказать, что в массиве no two равно элементам. – openspace
Это не доказательство того, что вы найдете один случай, когда вы найдете их быстрее, чем 'n log n', вам нужно будет быстрее их находить, независимо от данных. Если вы создадите алгоритм, и мне разрешено прочитать реализацию, и я не могу найти ни одного экземпляра данных, который занимает как минимум 'n log n', то это« доказательство ». – Krycke
Почему? Если я знаю, что в массиве существуют два равных элемента, то я могу доказать, что нет равных элементов. Но это не помогает мне найти два равных элемента. – openspace
Пожалуйста, сформулируйте вашу проблему: какой алгоритм вы используете?
Вообще:
Нижняя граница: В худшем случае, если вы, конечно, должны прочитать на каждом индексе массива, то есть п операции.
Обесценивая проблему: Если у вас ограниченный домен, вы можете использовать другой массив A, который будет проиндексирован элементами домена. В A [i] вы сохраните #occurences i в своем массиве. Если вам нужно найти позиции элементов, вы можете иметь массив связанных списков.
Почему O (n log n): Если у вас есть массив элементов, где единственная операция, которую вы можете использовать, - это прямое сравнение, вы не можете использовать этот трюк. Но вы можете использовать некоторый словарь, такой как структура данных, с доступом O (log n), и вы приходите с O (n log n). Я бы хотел увидеть элегантное доказательство этого.
Почему не O (n): Представьте, что у вас есть массив, в котором нет равных элементов. Можете ли вы показать это в O (n)? Это невозможно сделать быстрее, чем сортировка массива, если вы думаете об этом. И сортировка в общем случае в лучшем случае O (n log n).
Алгоритм используется только для сравнения. Об этом «элегантном доказательстве» я говорю. – openspace
Итак, главный вопрос: «Почему нижняя граница для поиска двух равных элементов с использованием только сравнения - это n log n?» – openspace
Вы можете преобразовать его в сортировку. В случае, если нет равных элементов, вам необходимо получить полный порядок элементов. Это эквивалентно сортировке. В худшем случае это невозможно сделать быстрее, чем сортировать. –
Через HashMap вы можете найти общий элемент в одном массиве с сложностью O (n). Следуйте этому Java-коду.
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
Main repeat = new Main();
int arr[] = {4, 12, 4, 5, 12, 3, 1,0,6,22,7,15,15};
int arr_size = arr.length;
repeat.printRepeating(arr, arr_size);;
}
void printRepeating(int arr[], int size)
{
HashMap<Integer,Integer> map = new HashMap<Integer, Integer>();
ArrayList <Integer> comon=new ArrayList<>();
int i;
System.out.println("Repeated elements are : ");
for (i = 0; i < size; i++)
{
if (map.containsKey(arr[i]))
System.out.println(arr[i]+"");
else
map.put(arr[i],arr[i]);
}
}
}
Что такое сложность построения Hashmap? – openspace
См. Эту ссылку https://stackoverflow.com/a/4553642/6503318 –
- 1. Java два равных знака в одном заявлении?
- 2. Как связать два равных дочерних элемента?
- 3. Найти два webelements в одном arraylist
- 4. Сравните два элемента в одном NSArray
- 5. Java: Как определить, имеет ли массив два равных элемента?
- 6. Как найти число равных элементов в массиве javascript
- 7. Как найти два элемента, которые имеют наименьшую разницу в массиве?
- 8. Два элемента в массиве, xor которых максимальный
- 9. Объединить два запроса MySQL в одном массиве
- 10. Реализовать два стека в одном массиве
- 11. Объединить два поля в одном массиве
- 12. Найти без дублирования элемента в отсортированном массиве
- 13. Как найти 2 непарных элемента в массиве?
- 14. Ссылка на два элемента управления в одном
- 15. Javascript, переставлять два элемента в массиве функционально
- 16. функционального программирования изменить два элемента в массиве
- 17. объединить два элемента в массиве perl
- 18. Как суммировать наибольшие два элемента в массиве
- 19. Сменить два булева элемента в массиве
- 20. Найдите два повторяющихся элемента в заданном массиве
- 21. Не удалось сравнить два элемента в массиве
- 22. Переключение два элемента в ассоциативном массиве
- 23. Как поменять два элемента в наблюдаемом массиве?
- 24. Найти несколько массив в одном массиве
- 25. java два потока, работающих на одном массиве
- 26. Найти 2 повторяющихся элемента в заданном массиве
- 27. Python: найти положение элемента в массиве
- 28. Найти появление элемента в массиве в Java
- 29. Найти индекс элемента в массиве в PHP
- 30. мангуст найти два идентификаторами в массиве
Какой алгоритм вы используете для этого? – shruti1810
Прошу любого алгоритма. Почему нижняя граница для нахождения двух равных элементов равна n log n? – openspace