Здравствуйте, sprsrpsh, Вы писали:
S>Спасибо, только не понимаю, почему мой алгоритм имеет сложность O(n*n), выбор минимума производится n раз за log(n) времени, используется выбор минимума методом дерева. Вроде O(n*log(n)). А насчёт деревьев, в интернете есть описание всех этих функций и алгоритмов? Я в Borland C++ 3.2 работаю, буду сам всё реализовывать.
Где же там "метод дерева"?
У тебя неупорядоченный массив. Ты его разбиваешь примерно пополам, в каждой из половинок рекурсивно ищешь минимум, а затем берёшь минимум из двух результатов.
Теперь внимание, вопрос: сколько всего элементов массива ты читаешь? Ответ: все!!!
Да, глубина рекурсии — логарифм. Так ведь просто сканирование массива имеет глубину 1.
S>А насчёт перестановки мест слагаемых, там результатом не будет сумма всех элементов, кто не верит — пусть подумает на досуге, почему. Если бы всё было так просто!
Ну я предположил, что это была ошибка в условии. Потому что есть очень похожая практическая задача — суммирование по Хаффману. А какой смысл у твоей задачи?
И тем не менее, решение с использованием пирамиды остаётся в силе.