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

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

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

Прошу прощения за сумбурное описание, но я буду исправляться и повышать свой уровень. Не откажите новичку. Спасибо!
...
Рейтинг: 0 / 0
16.07.2014, 05:28
    #38697379
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нахождение суммы близкой к заданной из массива
Ваша проблема никак не соотносится с Java.
Создаёте словесное описание алгоритма, а потом "переводите" полученное на Java.
Если "как можно ближе" означает "максимально возможная, не превышающая заданную" и других ограничений нет, то я бы искал "из минимально возможного числа слагаемых": сортируем массив по убыванию, выкидывая все неподходящие числа и "начинаем с первой позиции" :)
...
Рейтинг: 0 / 0
16.07.2014, 09:50
    #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
16.07.2014, 17:09
    #38698171
SashkaBol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нахождение суммы близкой к заданной из массива
Basil A. SidorovВаша проблема никак не соотносится с Java.
Создаёте словесное описание алгоритма, а потом "переводите" полученное на Java.


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

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


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

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

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

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

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

1) Собственно алгоритм. Его можно описать словами, блоксхемой или любым псевдо-языком.
2) Реализация. Это перевод собственно алгоритма на язык Java.
...
Рейтинг: 0 / 0
16.07.2014, 22:17
    #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
16.07.2014, 22:26
    #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
17.07.2014, 04:19
    #38698521
SashkaBol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нахождение суммы близкой к заданной из массива
Еще вопрос. Как переделать код чтобы возвратить все возможные варианты комбинаций?
...
Рейтинг: 0 / 0
17.07.2014, 12:50
    #38698920
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нахождение суммы близкой к заданной из массива
SashkaBol, гугли по ключевым словам Java AND Permutations. Находится много готовых исходников.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / нахождение суммы близкой к заданной из массива / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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