powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / нахождение суммы близкой к заданной из массива
12 сообщений из 12, страница 1 из 1
нахождение суммы близкой к заданной из массива
    #38697363
SashkaBol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только начал изучать Java (1 месяц) и сразу вопрос:

Никак не могу сообразить алгоритм. Решение не нужно, просто наведите на мысль...

Есть массив элементов. Обычно длина не превышает 10 элементов. элементы - целые вещественные числа. Всегда положительные
Есть сумма, которая задается изначально. Скороее всего эту сумму подобрать не получится (из условия). Нужно вернуть массив элементов сумма которых самая близкая к заданной. Если вариантов больше чем один, то вернуть все массивы.

Прошу прощения за сумбурное описание, но я буду исправляться и повышать свой уровень. Не откажите новичку. Спасибо!
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38697379
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваша проблема никак не соотносится с Java.
Создаёте словесное описание алгоритма, а потом "переводите" полученное на Java.
Если "как можно ближе" означает "максимально возможная, не превышающая заданную" и других ограничений нет, то я бы искал "из минимально возможного числа слагаемых": сортируем массив по убыванию, выкидывая все неподходящие числа и "начинаем с первой позиции" :)
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38697500
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 16.07.2014 4:47, SashkaBol wrote:

> Есть массив элементов. Обычно длина не превышает 10 элементов. элементы - целые вещественные числа. Всегда положительные
> Есть сумма, которая задается изначально. Скорее всего эту сумму подобрать не получится (из условия). Нужно вернуть
> массив элементов сумма которых самая близкая к заданной. Если вариантов больше чем один, то вернуть все массивы.

Поищи по https://www.google.ru/search?q=задача о рюкзаке


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38698171
SashkaBol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovВаша проблема никак не соотносится с Java.
Создаёте словесное описание алгоритма, а потом "переводите" полученное на Java.


Относится, ведь реализовывать я ее буду в Java. И, естественно, чтобы не плодить тем, буду задавать вопросы тут.

Basil A. SidorovЕсли "как можно ближе" означает "максимально возможная, не превышающая заданную" и других ограничений нет, то я бы искал "из минимально возможного числа слагаемых": сортируем массив по убыванию, выкидывая все неподходящие числа и "начинаем с первой позиции" :)


А что если достаточно убрать пару значений из середины, которые не находятся по-соседству...

Я тоже думал про частный случай рюкзака. Буду изучать вопрос. Спасибо!
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38698191
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashkaBolА что если достаточно убрать пару значений из середины, которые не находятся по-соседству...Это проблема алгоритма генерации перестановок. Тоже ничего java-specific
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38698244
SashkaBol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, что не обходите тему стороной.

А задачу о рюкзаке можно использовать для long переменных? Я себе слабо представляю каких размеров должен быть массив. Хотя в то же время можно избавиться от нескольких разрядов и перевести в int, но, боюсь, погрешность будет высокая...
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38698269
SashkaBol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разбирая задачу о рюказаке, во всех примерах (которые я смог найти) идет возврат максимальной стоимости близкой к заданной. Но мне нужно вернуть массив элементов, которые составляют эту стоимость, притом их может быть несколько... Может у кого в загажниках есть подобные примеры?
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38698285
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashkaBolСпасибо, что не обходите тему стороной.

А задачу о рюкзаке можно использовать для long переменных? Я себе слабо представляю каких размеров должен быть массив. Хотя в то же время можно избавиться от нескольких разрядов и перевести в int, но, боюсь, погрешность будет высокая...
Задачу о рюкзаках можно решать в short, int, long, float, double переменых.

Твой вопрос как уже сказали выше состоит из двух частей.

1) Собственно алгоритм. Его можно описать словами, блоксхемой или любым псевдо-языком.
2) Реализация. Это перевод собственно алгоритма на язык Java.
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38698412
SashkaBol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В начальном условии не доглядет, что каждый элемент массива имеет стоимость. Стоимость должна быть максимально. Т.е. самый типичный рюкзак.
Разобрался с рюкзаком, разобрался как вывести результат. Можете подсказать, как методом print вернуть массив или List?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
public class Ruc
{
    public static void main(String[] args)
    {
        int[] weights = new int[] {6, 3, 4, 2, 5};
        int[] priсes = new int[]{5, 1, 3, 3, 6};
        int sum = 15;

        int k = weights.length;

        int[][] A = new int[k + 1][sum +1 ];

        //рюкзак
        for (int n = 0; n <= sum; ++n)
            A[0][n] = 0;
        for (int s = 1; s <= k; ++s){
            for (int n = 0; n <= sum; ++n){
                A[s][n] = A[s-1][n];
                if (n >= weights[s-1] && (A[s-1][n-weights[s-1]] + priсes[s-1] > A[s][n]))
                    A[s][n] = A[s-1][n-weights[s-1]] + priсes[s-1];
            }
        }

        for (int s = 0; s <= k; ++s){                            //тестовый вывод
            for (int n = 0; n <= sum; ++n){
                System.out.print(A[s][n] + " ");
            }
            System.out.println();
        }

        print(k, sum, A, weights);                               //вызов метода
    }


    static void print(int s, int n, int[][] A, int[] w)           //вывод результата на экран
    {
        if (A[s][n] == 0)
            return;
        else
            if (A[s-1][n] == A[s][n]){
                print(s - 1, n, A, w);

            }
        else{
                print(s - 1, n - w[s-1], A, w);
                System.out.print(A[s][n]+ " ");
                System.out.print(w[s-1] + " ");
                System.out.println(s);
            }
    }

}
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38698417
SashkaBol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам спосил, сам решил))

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
static List<Integer> inArray(int s, int n, int[][] A, int[] w, List<Integer> list)
    {
        List<Integer> copy = list;
        if (A[s][n] == 0)
            return list;
        else
        if (A[s-1][n] == A[s][n]){
            list = inArray(s - 1, n, A, w, copy);

        }
        else{
            list = inArray(s - 1, n - w[s-1], A, w, copy);
            list.add(s);
        }
        return list;
    }
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38698521
SashkaBol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопрос. Как переделать код чтобы возвратить все возможные варианты комбинаций?
...
Рейтинг: 0 / 0
нахождение суммы близкой к заданной из массива
    #38698920
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashkaBol, гугли по ключевым словам Java AND Permutations. Находится много готовых исходников.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / нахождение суммы близкой к заданной из массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]