Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];

Вниз

Наиболее быстрый алгоритм получения максимальной суммы   Найти похожие ветки 

 
Borealis   (2003-11-13 20:55) [0]

Имеем некий массив целых чисел. Массив динамический, потому он может состоять из нескольких десятков элементов, а может и из нескольких десятков тысяч. Из этого набора целых чисел нужно выбрать такой набор чисел, что бы в сумме получилось максимально возможное, для этого набора, число, но не превышающее некоторую константу К.

Какой вы предложите мне алгоритм для решения этой задачи?

Пробовал методом перебора в рекурсивных циклах, но это работает удручающе медленно, несмотря на то, что все операторы входящие в циклы я до предела оптимизировал.

Также пробовал перед началом перебора посортировать массив по возрастанию, а в процедуре прерывать цикл если текущий элемент при сложении с накопленной суммой превышает константу К - то есть следующие элементы на текущем уровне уже можно не проверять так как они заведомо будут такими же или даже большими. Но и такой, оптимизированный алгоритм ощутимого выигрыша во времени не даёт - максимальный выигрыш не превышает одного рекурсивного уровня.


 
default   (2003-11-13 21:43) [1]

как же ты с использованием сортировки-то делал?
у тебя же условие ""максимальной суммы"
то есть, чтобы разность "K-Сумма" была минимальной
вот, к примеру, твоя отсортированная последовательность
1 2 3 4 7 8 9
K=15
начинаешь значит складывать 1+2+3+4=10=S1
(на 7 заканчиваем складывать, так как тогда сумма превысит K)
7+8=15=S2
15-10=5=R1 и 15-5=0=R2
R2<R1... то есть сортировка тут не в помощь, если я правильно понял как ты действовал


 
default   (2003-11-13 21:54) [2]

описался
15- 15=0=R2
и дай больше инфы...максимальный размер массива, тип его элементов, возможные предположения о значении этих элементов...
(то есть, к примеру, ты знаешь, что в массиве могут быть только числа 1, 13, 56, 67, 78 или что-то подобное)


 
Dimaxx   (2003-11-13 23:33) [3]

Выдержка из справки

Sum function

Returns the sum of the elements in an array.

Unit Math

Category

Statistical routines

function Sum(const Data: array of Double): Extended; register;

Description

Sum returns the sum of all the values in the Data array parameter.


 
Dimaxx   (2003-11-13 23:34) [4]

Пардон, ошибся - SumInt!


 
wl   (2003-11-14 01:38) [5]

а сколько чисел то нужно?
сначала можно найти сумму всех элементов с помощью функции, приведенной выше, и если она меньше К, то это и будет искомый набор чисел, состоящий из всех элементов массива, иначе нужно решить задачу, чем-то похожую на размен большой купюры(К в данном случае) мелкими монетами (элементами массива). Можно числа отсортировать с помощью алгоритма QuickSort для ускорения



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
3-78823
licherep
2003-11-04 16:40
2003.11.24
помогите с фильтром


1-78925
Dred
2003-11-12 01:39
2003.11.24
Структура данных


1-79040
viol-2
2003-11-13 11:39
2003.11.24
Загрузка программы


1-78972
nejest
2003-11-14 15:31
2003.11.24
Определение ширины символа заданного шрифта


6-79093
oduvan
2003-09-20 09:40
2003.11.24
Трабл!!! TWebBrowser (#bottom)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский