2016-03-07 4 views
1

Я пытаюсь выяснить, есть ли альтернатива алгоритму грубой силы (или небольшое улучшение/наихудшая производительность для наивного алгоритм грубой силы), который все равно приведет к сложности времени O (N^2) и вспомогательному пространству O (1).Дополнительная сложность по времени O (N^2) с сложностью O (1) для поиска различных значений в массиве

Это мой грубая сила псевдокод:

procedure distinct(Input: array)        
     for i=0 to i < length of array      
      for j=i+1 to j < length of array     
       if array[i] == array[j] and i != j then 
        return false       
       end if 
       increment k 
      end for 
      increment j 
     end for 
     return true 
    end procedure 

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

Я думал, что могу применить алгоритм сортировки (например, Bubble или Insertion sort), а затем использовать цикл for, чтобы пройти через отсортированный массив, но это все равно даст мне квадратичную функцию, а не O (N^3)?

ответ

2

Сортировка массива с помощью пирамидальной сортировки и остановки, когда вы найдете два одинаковых элемента:

  • O (NlogN) временная сложность
  • O (1) пространство сложность

Вы можете также искать другие (более сложные алгоритмы) для этой цели here

Сортировка выбора и вставки 2 альтернативы с:

  • O (NxN) временная сложность
  • O (1) пространство сложность
+0

Спасибо за быстрый ответ! Мой вопрос, однако, очень странный, поскольку я ищу альтернативу точной O (N^2) временной сложности, альтернативной грубой силе, в отличие от лучшего решения. – qwerty

+0

Сортировка сортировки или сортировка вставки сделают трюк просто прекрасным. Обновлен ответ. –

+0

отлично, спасибо! Я не был уверен в правильности моего мышления в этом случае! – qwerty