<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://discopal.ispras.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D1%8E%D0%BA%D0%B7%D0%B0%D0%BA%D0%B5%3A%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5</id>
		<title>Задача о рюкзаке:динамическое программирование - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://discopal.ispras.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D1%8E%D0%BA%D0%B7%D0%B0%D0%BA%D0%B5%3A%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"/>
		<link rel="alternate" type="text/html" href="https://discopal.ispras.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D1%8E%D0%BA%D0%B7%D0%B0%D0%BA%D0%B5:%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;action=history"/>
		<updated>2026-04-26T21:42:03Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://discopal.ispras.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D1%8E%D0%BA%D0%B7%D0%B0%D0%BA%D0%B5:%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=1118&amp;oldid=prev</id>
		<title>WikiSysop: 1 версия</title>
		<link rel="alternate" type="text/html" href="https://discopal.ispras.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D1%8E%D0%BA%D0%B7%D0%B0%D0%BA%D0%B5:%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=1118&amp;oldid=prev"/>
				<updated>2008-08-04T09:55:52Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Методы динамического программирования дают возможность построить для [[задача о рюкзаке|задачи о рюкзаке]] псевдополиномиальные алгоритмы, использующие при своей работе массивы, превышающие (возможно экспоненциально) длину входных данных.&lt;br /&gt;
&lt;br /&gt;
Например, следующий алгоритм использует хранение наилучших частичных решений-наборов, в хэш-таблице, т. е. для каждого веса, если существует набор с таким весом, храниться максимальная стоимость. &lt;br /&gt;
Стартовав с пустого множества частичных наборов, и добавляя по одному, предметы, в каждый момент мы имеем не более ''B'' «лучших» частичных наборов, помещающихся в рюкзак.&lt;br /&gt;
В конце остается только выбрать самый дорогой из них.&lt;br /&gt;
Таким образом, хотя сложность этого алгоритма — ''O(nB)'' является экспоненциальной от длины входа, при ограниченных размерах рюкзака ''B'', алгоритм может быть полезен и эффективен.&lt;br /&gt;
Также можно организовать отбор ''наиболее легких'' решений, для каждой возможной стоимости набора,&lt;br /&gt;
как это сделано в [[Задача о рюкзаке:PTAS]].&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма на [[Python]] и пример его выполнения:&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
 def knapsack_dylp(A,B,C):&lt;br /&gt;
    print &amp;quot;A=&amp;quot;,A,&amp;quot;B=&amp;quot;,B,&amp;quot;C=&amp;quot;,C&lt;br /&gt;
    T={0:0} #Хэш: самая большая стоимость набора для веса - {вес:стоимость}&lt;br /&gt;
    Solution={0:[]}&lt;br /&gt;
    #Цикл по всем предметам $\frac{c_i}{a_i}$&lt;br /&gt;
    for i in range(0,len(A)):&lt;br /&gt;
        print C[i],&amp;quot;/&amp;quot;,A[i],&amp;quot;:&amp;quot;,&lt;br /&gt;
        T_old=dict(T)  #Копируем $T_{k-1}$ в $T_{old}$&lt;br /&gt;
        print T &lt;br /&gt;
        #Цикл по всем полученным частичным суммам&lt;br /&gt;
        for x in T_old:&lt;br /&gt;
            if (x+A[i])&amp;lt;=B:&lt;br /&gt;
                if (not T.has_key(x+A[i])) or (T[x+A[i]]&amp;lt;T_old[x]+C[i]):&lt;br /&gt;
                    T[x+A[i]]=T_old[x]+C[i]&lt;br /&gt;
                    Solution[x+A[i]]=Solution[x]+[i]&lt;br /&gt;
        print &amp;quot;    --&amp;gt;&amp;quot;,T&lt;br /&gt;
&lt;br /&gt;
    ResultCost = max(T.values())&lt;br /&gt;
    Result = Solution[argmax(T)]&lt;br /&gt;
    print Result,&amp;quot;:&amp;quot;,ResultCost&lt;br /&gt;
    return (Result,ResultCost)&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 A= [6, 3, 2, 5, 5, 1] B= 10 C= [3, 4, 5, 6, 7, 8]&lt;br /&gt;
 3 / 6 : {0: 0}&lt;br /&gt;
     --&amp;gt; {0: 0, 6: 3}&lt;br /&gt;
 4 / 3 : {0: 0, 6: 3}&lt;br /&gt;
     --&amp;gt; {0: 0, 9: 7, 3: 4, 6: 3}&lt;br /&gt;
 5 / 2 : {0: 0, 9: 7, 3: 4, 6: 3}&lt;br /&gt;
     --&amp;gt; {0: 0, 2: 5, 3: 4, 5: 9, 6: 3, 8: 8, 9: 7}&lt;br /&gt;
 6 / 5 : {0: 0, 2: 5, 3: 4, 5: 9, 6: 3, 8: 8, 9: 7}&lt;br /&gt;
     --&amp;gt; {0: 0, 2: 5, 3: 4, 5: 9, 6: 3, 7: 11, 8: 10, 9: 7, 10: 15}&lt;br /&gt;
 7 / 5 : {0: 0, 2: 5, 3: 4, 5: 9, 6: 3, 7: 11, 8: 10, 9: 7, 10: 15}&lt;br /&gt;
     --&amp;gt; {0: 0, 2: 5, 3: 4, 5: 9, 6: 3, 7: 12, 8: 11, 9: 7, 10: 16}&lt;br /&gt;
 8 / 1 : {0: 0, 2: 5, 3: 4, 5: 9, 6: 3, 7: 12, 8: 11, 9: 7, 10: 16}&lt;br /&gt;
     --&amp;gt; {0: 0, 1: 8, 2: 5, 3: 13, 4: 12, 5: 9, 6: 17, 7: 12, 8: 20, 9: 19, 10: 16}&lt;br /&gt;
 [2, 4, 5] : 20&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Алгоритмы]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>	</entry>

	</feed>