Приснилось, что кто-то допытывался от меня алгоритм нахождения суммы чисел на интервале в отсортированном массиве. Лучше, чем O(длина интервала). Без предобработки. Хорошо, что я проснулся.
А сможете за О() найти подмассив идущих подряд чисел с наибольшей суммой? Числа могут быть отрицательными и естественно они не отсортированы. Недавно кто-то рассказал задачу. Показалось забавно...
Эту задачу я знаю. Прочитал впервые в Жемчужины Программирования, если не ошибаюсь, про нее. И, честно говоря, не помню, допер я до алгоритма Кадана сам в тот раз или подглядел в ответ.
cur_sum = 0 max_sum = 0 for x in xs: cur_sum = max(0, cur_sum + x) max_sum = max(max_sum, cur_sum) print max_sum
Про квантовые компьютеры надо почитать - я в них дуб.
Я вот зря не уточнил, имелось в виду лучше, чем О(n) по количеству операций (что я подразумеваю всегда), или может просто по времени и надо было про параллельность поговорить. Но отсортированность тут все равно не к месту. Если только это не массив чисел с плавающей точкой, где точность надо не потерять... Ох.
Кстати да, без всяких квантовых компьютеров, обычным параллельным processing'ом можно посчитать за O(logN). Время - это самая главная характеристика. Операции не всегда даже можно правильно оценить.
Comments 9
Числа могут быть отрицательными и естественно они не отсортированы.
Недавно кто-то рассказал задачу. Показалось забавно...
Reply
cur_sum = 0
max_sum = 0
for x in xs:
cur_sum = max(0, cur_sum + x)
max_sum = max(max_sum, cur_sum)
print max_sum
Reply
Reply
Reply
Reply
Я вот зря не уточнил, имелось в виду лучше, чем О(n) по количеству операций (что я подразумеваю всегда), или может просто по времени и надо было про параллельность поговорить. Но отсортированность тут все равно не к месту. Если только это не массив чисел с плавающей точкой, где точность надо не потерять... Ох.
Reply
Время - это самая главная характеристика. Операции не всегда даже можно правильно оценить.
Reply
Reply
Leave a comment