Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
1 / 1 / 2
Регистрация: 19.11.2014
Сообщений: 126
1

Задача о ранце (динамическое программирование)

02.03.2018, 11:48. Показов 5739. Ответов 18

Author24 — интернет-сервис помощи студентам
В общем нужно написать сайт, где я мог бы ввести свои данные и получить решение. Вот здесь есть даже код, но он не на скрипте (с ним не работал практически). Буду рад любой помощи. Можно в принципе и на php.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2018, 11:48
Ответы с готовыми решениями:

задача динамическое программирование
В город N приехал цирк с комндой атлетов. Они хотят удивить горожан города N -- выстроить из своих...

задача на динамическое программирование
На квадратной доске расставлены целые неотрицательные числа. Черепашка, находящаяся в левом...

Динамическое программирование (задача)
Помогите советом. Есть задача: В арифметическом выражении разрешается использовать число 1,...

Задача на динамическое программирование
Узник пытается бежать из замка, который состоит из N×M квадратных комнат, расположенных в виде...

18
1 / 1 / 2
Регистрация: 19.11.2014
Сообщений: 126
13.03.2018, 13:22  [ТС] 2
Актуально. Вот такие способы решения есть на разных языках. Сложность представляют функции и заполнение.
Миниатюры
Задача о ранце (динамическое программирование)   Задача о ранце (динамическое программирование)   Задача о ранце (динамическое программирование)  

0
357 / 118 / 20
Регистрация: 08.01.2015
Сообщений: 1,361
Записей в блоге: 1
13.03.2018, 18:03 3
Цитата Сообщение от FAIZ112 Посмотреть сообщение
заполнение
Не совсем понятна задача. Четко опишите. что хотите получить и каковы входные параметры.
0
1 / 1 / 2
Регистрация: 19.11.2014
Сообщений: 126
15.03.2018, 08:48  [ТС] 4
Htext, есть такой ресурс калькулятор. Нужно что-то похожее сделать. Ввод видимо тоже в виде таблицы, или обычное заполнение массива. Входные параметры не имеют значения, любые.
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
15.03.2018, 09:06 5
FAIZ112, В задаче о ранце есть разные варианты постановки задачи. Где-то нужно набрать как можно больше вещей, где-то вещей с наибольшей стоимостью. Вы просто найдите код на любом языке и кто-нибудь для вас переведет его на Js. Я могу перевести код с Php с последней вашей картинки, но я не понимаю, что значит переменная needed в данном случае, а вникать лень.
0
1 / 1 / 2
Регистрация: 19.11.2014
Сообщений: 126
15.03.2018, 10:13  [ТС] 6
renat_dmitriev, нужно и количество и ценность вещей одновременно.
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
15.03.2018, 10:21 7
FAIZ112, Это утверждение противоречит элементарной логике. Если одна большая вещь стоит 1000, а три маленьких по 200, какой вариант в итоге должен вернуть метод - с одной большой, но ценной вещью или с тремя маленькими, не ценными?
0
357 / 118 / 20
Регистрация: 08.01.2015
Сообщений: 1,361
Записей в блоге: 1
15.03.2018, 13:03 8
Цитата Сообщение от FAIZ112 Посмотреть сообщение
есть такой ресурс калькулятор
Увы, открыть не смог: браузер пишет, что недоверенное соединение. Приложите скриншоты.
Цитата Сообщение от renat_dmitriev Посмотреть сообщение
Если одна большая вещь стоит
Элементарной логике, да, противоречит. Если нет соответствующего критерия.
Цитата Сообщение от FAIZ112 Посмотреть сообщение
и количество и ценность вещей
В самом деле, если нет критерия, то это требование - противоречивое. Если в задаче существует решение в виде кривой безразличия (точнее, если решение - неединственно), то необходим хотя бы один критерий выбора оптимальной точки.
Например, в качестве критерия можно было бы выбрать:
(произведение ценности на количество) -> max.

Добавлено через 4 минуты
Или корень квадратный из суммы квадратов ценностей и квадратов количества (с учетом размерно-нормирующих весовых множителей).
0
1 / 1 / 2
Регистрация: 19.11.2014
Сообщений: 126
15.03.2018, 15:33  [ТС] 9
renat_dmitriev, Htext, нужно уложить как можно большее число ценных вещей в рюкзак. Такой вариант годится? Ваш пример про 1000 и 200, нужно взять три по 200.
0
1 / 1 / 2
Регистрация: 19.11.2014
Сообщений: 126
15.03.2018, 15:40  [ТС] 10
Цитата Сообщение от FAIZ112 Посмотреть сообщение
Htext, есть такой ресурс калькулятор.
Вот скриншоты.
Миниатюры
Задача о ранце (динамическое программирование)   Задача о ранце (динамическое программирование)  
0
Эксперт JS
2454 / 1761 / 624
Регистрация: 11.07.2016
Сообщений: 4,051
15.03.2018, 16:49 11
Цитата Сообщение от FAIZ112 Посмотреть сообщение
Ваш пример про 1000 и 200, нужно взять три по 200
И по какому же критерию вы так решили?
0
357 / 118 / 20
Регистрация: 08.01.2015
Сообщений: 1,361
Записей в блоге: 1
15.03.2018, 18:08 12
Ух, аж что-то родное встретилось))). Правда, целочисленные ЛП я не занимался, только обычным ЛП с вещественными числами (ЛППК, если точнее). Даже, похвастаюсь, распространил (теоретически) методику решения задач ЛППК на множество всех вещественных (действительных) чисел.
А целочисленное, я смотрю, с одной стороны, проще (алгоритмически), с другой стороны - не все столь однозначно.
В общем, по алгоритму, взятому здесь: https://ru.wikipedia.org/wiki/... 1%86%D0%B5
я тут набросал такой код:
PHP
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
// Ввод:
// Ценности предметов (загруженные в массив v)
// Веса предметов (загруженные в массив w)
// Количество предметов (n)
// Грузоподъемность (Wg)
$Wg = 1000;
$m =  array(array());
$w = array(1,2,3,4,5,6);
$v = array(10,20,30,40,50,60);
$n = sizeof($w);
$x = 0;
for ($j=0 ; $j<$Wg; $j++){
    $m[0][$j] = 0;
}
 
for ($i=1; $i<$n; $i++) {
    for ($j=0; $j<$Wg;$j++) {
        if ($w[$i] > $j) {
            $m[$i][$j] = $m[$i - 1][$j];
        } else {
            $m[$i][$j] = max($m[$i - 1][$j], $m[$i - 1][$j - $w[$i]] + $v[$i]);
        }
        $x = $m[$i][$j];
    }
    echo  'Wg='.$x.'<br/>';
}
echo 'n='.$n;
Он выводит на каждой итерации все более и более близкое к оптимальному решение, в таком виде:
HTML5
1
2
3
4
5
6
Wg=20
Wg=50
Wg=90
Wg=140
Wg=200
n=6
Числа в массивах взяты для примера. Осталось только сделать html-форму ввода данных и отправить запрос на сервер.
Впрочем, возможны и иные алгоритмы - все зависит от критерия.

Добавлено через 11 минут
Правда, теперь я и сам не пойму - что же этот алгоритм определяет... Суммировать результаты надо, что ли.

Добавлено через 8 минут
Понятно, это решение для случая, когда каждый предмет находится в ЕДИНСТВЕННОМ экземпляре (разница чисел равна как раз элементам массива v).

Добавлено через 21 минуту
Что-то я тут не то написал, алгоритм неверный. Для Wg=100 те же самые цифры получаются. Хотя, 200>100.
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
15.03.2018, 19:42 13
FAIZ112, Нет, не годится, потому что используя "ценных" вы снова все запутываете. Если нужно кол-во - забудьте о ценности. И судя по выложенным вами скриншотам - в задаче речь о ценности. Мне кажется вы пока сами просто не понимаете задачи.
0
357 / 118 / 20
Регистрация: 08.01.2015
Сообщений: 1,361
Записей в блоге: 1
16.03.2018, 19:55 14
Да, желательно бы ясный алгоритм для оптимизации. Ибо, если делать просто перебором - это будет очень долго при большом объеме исходных данных. А алгоритм из Википедии считает что-то не то.
В принципе, для частного случая {0, 1} можно, наверное, как-то ЛП и, соответственно, симплекс-метод приспособить. Хотя, программная реализация симплекс-метода - это дело достаточно громоздкое.

Добавлено через 4 минуты
Я бы даже сказал - новичок там едва ли справится. На Турбо-Паскале, помнится, он занимал не один десяток (если не одну сотню) строк. И работал на 486-м процессоре около ПОЛУЧАСА. При всего четырех переменных и где-то 30-и ограничениях.
Так что Вам, пожалуй, проще где-нибудь платную заявку разместить.
0
1 / 1 / 2
Регистрация: 19.11.2014
Сообщений: 126
17.03.2018, 23:15  [ТС] 15
Да задача мне ещё не совсем понятна. Я думаю все таки надо заполнять опираясь на ценность предмета. Есть несколько страниц, например, вот, второй, третий, четвертый и последний. Возможно даст какие то подсказки.
0
1 / 1 / 2
Регистрация: 19.11.2014
Сообщений: 126
24.03.2018, 14:17  [ТС] 16
В общем есть такое решение на C#, и оно работает. Сейчас попробую написать это на скрипте.
Кликните здесь для просмотра всего текста

C#
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
using System;
using System.IO;
class solver
{
    struct Item
    {
        public int c;
        public double w;
    }
    static void Main()
    {
        string[] lines = File.ReadAllLines("input.txt");
        Double Wmax = Double.Parse(lines[0].Split()[0]);
        int n = Int32.Parse(lines[0].Split()[1]);
        Item[] arr = new Item[n];
        Item tmp;
        
        for (int i=1; i<=n; i++)
        {
            tmp.c = Int32.Parse(lines[i].Split()[0]);
            tmp.w = Double.Parse(lines[i].Split()[1]);
            arr[i-1] = tmp;
        }
        
        int cMax = 0; 
        for (int nabor=0; nabor<Math.Pow(2,n); nabor++)
        {
            Double wTmp = 0; int cTmp = 0;
            for (int i=0; i<n; i++)
            {
                int maska = 1 << i;
                if ((nabor & maska) > 0)
                {
                    cTmp += arr[i].c;
                    wTmp += arr[i].w;
                }
            }
            if (wTmp<=Wmax && cTmp>cMax)
            {
                cMax = cTmp;
            }
        }   
        Console.WriteLine(cMax);
        Console.ReadKey();
    }
}
0
1 / 1 / 2
Регистрация: 19.11.2014
Сообщений: 126
17.04.2018, 18:48  [ТС] 17
Как можно реализовать код с данной страницы на js? Проблема с двумерным массивом.
Миниатюры
Задача о ранце (динамическое программирование)  
0
1 / 1 / 2
Регистрация: 19.11.2014
Сообщений: 126
17.04.2018, 22:24  [ТС] 18
2 массива содержат вес и ценность предмета. Как быть с двумерным?
Кликните здесь для просмотра всего текста

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<html>
<script>
var W = [];//вес 
var P = [];//ценность 
var Sum = []; 
//var Sum_W = 0; var Best = 0; 
var L = prompt('Введите вместимость рюкзака: '); 
var k = prompt('Введите количество предметов: '); //вводим число элементов массива 
for(var i=0;i < k;i++) 
{ 
    W[i] = prompt('Введите вес ['+i+'] предмета: '); //Заполняем массив 
} 
for(var i=0;i < k;i++) 
{
    P[i] = prompt('Введите ценность ['+i+'] предмета: '); //Заполняем массив 
} 
 
for(i=0;i<k;i++) 
document.writeln('W['+i+']='+W[i]+'</br>'); 
for(i=0;i<k;i++) 
document.writeln('P['+i+']='+P[i]+'</br>'); 
</script>
<html>


Добавлено через 10 минут
Может кто-нибудь помочь?
0
357 / 118 / 20
Регистрация: 08.01.2015
Сообщений: 1,361
Записей в блоге: 1
18.04.2018, 20:49 19
FAIZ112, в JS есть двумерные массивы, но для их создания придется делать соответствующий метод. https://javascript.ru/forum/mi... cript.html
Это громоздко. Лучше Вы используйте РНР, к примеру. Код будет практически тем же самым, только переменные начинаются с символа $ и вместо
Цитата Сообщение от FAIZ112 Посмотреть сообщение
document.writeln('W['+i+']='+W[i]+'</br>');
будет
PHP
1
echo('W['.$i.']='.$W[$i].'</br>');
В РНР двумерные массивы объявляются и используются, как обычно.

Добавлено через 1 минуту
Переменные L, k можно отправить через форму отправки сообщений. Или записать при помощи JS в GET-запрос.
1
18.04.2018, 20:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2018, 20:49
Помогаю со студенческими работами здесь

Задача на динамическое программирование.
Что не правильно? #include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; int main()...

Задача на динамическое программирование
Даны n последовательных столбиков. Кузнечик находится на первом столбе, умеет прыгать на 1,2,...,k...

Задача на динамическое программирование
Требуется решить задачу на динамическое программирование. Условия:На планете Олимпия очень...

Задача на динамическое программирование
Вы любите играть в игры? Конечно, любите! Но про эту игру, возможно, ничего не знаете и не слышали...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru