Я пытаюсь задать вопрос 2.3-7 в CLRS, в котором говорится:
Опишите алгоритм тэта (n log (n)) - времени, который, учитывая набор S из n целых чисел и другое целое число x, определяет, существуют ли два элемента в S, сумма которых точно равна x.
Мой алгоритм следующий:
1. Sort(S)
2. S' = x - Sort(S) (subtracts x from each element in sorted S)
3. for each y in S' check if y in Sort(S) if not return NIL
4. For a y satisfying condition 3 let S'' = Sort(S)+y
5. Return the index of value v in S'' which equals x and return (v-y,y) from S
Это, кажется, работает в тета (n lg (n)) время, потому что мы можем сделать
- В тета (n (lg (n)) раз с сортировкой слиянием
- В O (n) время
- В тета (nlg (n)) время Бинарный поиск для каждого из n элементов в S '
- В O (n) время
- В O (n) время
Сумма равна тета (n log (n)). Это правильно?