2015-05-17 3 views
-4

Я хочу знать, почему, находя два одинаковых элемента в одном массиве, нижняя граница n log n. Я понятия не имею об этом.Найти два равных элемента в одном массиве

+0

Какой алгоритм вы используете для этого? – shruti1810

+0

Прошу любого алгоритма. Почему нижняя граница для нахождения двух равных элементов равна n log n? – openspace

ответ

0

В худшем случае два одинаковых элемента всегда могут быть последними, на которые вы смотрите. Без какого-либо заказа вам нужно сравнить каждый элемент с каждым элементом. O (N^2).

Ну, нам не нужно быть таким глупым. Разумеется, мы можем добавить порядок, отсортировав массив: O (nlog (n)). А после этого просто пройдите через массив и найдите два с одинаковым значением O (n).

Лучше тогда это трудно сделать, что делает нижнюю границу O (nlog (n)).

+0

Хм .. Это не доказательство. Конечно, мы могли бы сортировать массив и находить их, но внезапно мы могли бы найти их быстрее. Думаю, это непростая проблема. Я мог бы задать еще один вопрос. Если я могу найти два равных элемента в массиве быстрее n log n, я могу доказать, что в массиве no two равно элементам. – openspace

+0

Это не доказательство того, что вы найдете один случай, когда вы найдете их быстрее, чем 'n log n', вам нужно будет быстрее их находить, независимо от данных. Если вы создадите алгоритм, и мне разрешено прочитать реализацию, и я не могу найти ни одного экземпляра данных, который занимает как минимум 'n log n', то это« доказательство ». – Krycke

+0

Почему? Если я знаю, что в массиве существуют два равных элемента, то я могу доказать, что нет равных элементов. Но это не помогает мне найти два равных элемента. – openspace

0

Пожалуйста, сформулируйте вашу проблему: какой алгоритм вы используете?

Вообще:

Нижняя граница: В худшем случае, если вы, конечно, должны прочитать на каждом индексе массива, то есть п операции.

Обесценивая проблему: Если у вас ограниченный домен, вы можете использовать другой массив A, который будет проиндексирован элементами домена. В A [i] вы сохраните #occurences i в своем массиве. Если вам нужно найти позиции элементов, вы можете иметь массив связанных списков.

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

Почему не O (n): Представьте, что у вас есть массив, в котором нет равных элементов. Можете ли вы показать это в O (n)? Это невозможно сделать быстрее, чем сортировка массива, если вы думаете об этом. И сортировка в общем случае в лучшем случае O (n log n).

+0

Алгоритм используется только для сравнения. Об этом «элегантном доказательстве» я говорю. – openspace

+0

Итак, главный вопрос: «Почему нижняя граница для поиска двух равных элементов с использованием только сравнения - это n log n?» – openspace

+0

Вы можете преобразовать его в сортировку. В случае, если нет равных элементов, вам необходимо получить полный порядок элементов. Это эквивалентно сортировке. В худшем случае это невозможно сделать быстрее, чем сортировать. –

0

Через 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]); 
     } 
    } 
} 
+0

Что такое сложность построения Hashmap? – openspace

+0

См. Эту ссылку https://stackoverflow.com/a/4553642/6503318 –

Смежные вопросы