`
yiminghe
  • 浏览: 1461835 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

背包问题javascript演示

阅读更多

背景:

经典递归示例:背包问题

 

 

背包问题的一个例子:应该选择哪些盒子,才能使价格尽可能地大,而保持重量小于或等于15 kg?

 

效果:

 

演示地址@google code

 

 

代码:

 

/*
		a:{
			weight : weight, //当前物品重量
			value : value //当前物品价值
		}
	*/
            function knapsack(a, limitW) {

                var totV = 0,
                maxV = 0;
                var option = [],
                cop = [];
								var N=a.length;
                for (var i = 0;
                i < a.length;
                i++) {
                    totV += a[i].value
                }



                function find(i, tw, tv) {
                    var k;
                    if (tw + a[i].weight <= limitW) //考虑物品i放入背包的情况
                    {
                        cop[i] = a[i].index;
                        if (i < N - 1) {
                            find(i + 1, tw + a[i].weight, tv);
                        }
                        else {
                        	//最佳结果形成
                            for (k = 0; k < N; k++) {
                                option[k] = cop[k];
                            }
                            maxV = tv;
                        }
                    }
                    if (tv - a[i].value > maxV) //考虑物品i不放入背包的情况,此状态可以剪掉部分节点
                    {
                        cop[i] = 0;
                        if (i < N - 1) {
                            find(i + 1, tw, tv - a[i].value);
                        }
                        else {
                        	//最佳结果形成
                            for (k = 0; k < N; k++) {
                                option[k] = cop[k];
                            }
                            maxV = tv - a[i].value;
                        }
                    }
                }

                find(0, 0, totV);

                return {
                    maxValue: maxV,
                    option: option
                };

            }
  • 大小: 24.8 KB
  • 大小: 11.8 KB
0
0
分享到:
评论

相关推荐

    mcmc-demo, 交互式 马尔可夫链 Monte Carlo javascript演示.zip

    JavaScript的动态类型和丰富的社区支持使得开发这样的交互式演示变得可行。这个“mcmc-demo-master”可能包含HTML、CSS和JavaScript文件,用于创建可视化界面,让用户能够输入自定义参数、观察链的演化过程,并实时...

    gena-demo:JavaScript演示中的通用算法

    **JavaScript 演示中的通用算法** 在JavaScript编程中,通用算法是指那些可以在不同场景下广泛应用,不依赖特定数据结构或问题的算法。这些算法通常具有很高的可复用性和灵活性,能够解决各种常见问题。"gena-demo...

    数据结构与算法 JavaScript 描述. 章节练习.zip

    3. 动态规划(Dynamic Programming):解决具有重叠子问题和最优子结构的问题,如斐波那契数列、背包问题等。 4. 贪心算法(Greedy Algorithm):每次选择局部最优解,期望达到全局最优。例如,最小生成树问题...

    JavaScript-Algorithms:一套将以我自己的方式实现的JS算法,我能想到的所有内容都涵盖了单元测试和边缘案例

    在JavaScript中,动态规划可以应用于求解最长公共子序列、背包问题等。 5. **图论与网络流**:图算法如Dijkstra最短路径算法、Floyd-Warshall所有对最短路径、Prim最小生成树等,这些在处理网络通信、社交网络分析...

    背包旅行响应式网页模板

    2. "下载PPT模板.url" - 这可能链接到与旅行主题相关的PowerPoint演示文稿模板,供用户创建旅行报告或展示。 3. "下载字体.url" - 提供的可能是与模板风格匹配的特殊字体,用于增强网页的视觉效果。 4. "下载网页...

    knapsack管理系统基于python (117).zip

    4. 数据文件:可能包含背包问题的数据集,用于测试和演示系统性能。 5. 可能还有版本控制文件(如.gitignore),构建脚本(如setup.py)以及测试代码。 学习这个项目可以让我们深入理解Python编程、背包问题的解决...

    cs-in-js:愚弄JavaScript和基本算法

    在这个项目中,作者可能通过JavaScript代码来解释和演示了一些经典的CS问题和算法,帮助开发者将理论知识应用到实际编程中。 首先,我们要理解JavaScript的基本语法。它是一种弱类型、动态类型的编程语言,支持函数...

    js-ds-algs:javascript数据结构和算法

    在这个名为"js-ds-algs"的项目中,包含了对JavaScript数据结构和算法的详细注释及实际演示,旨在为学习者提供一个实践和学习的平台。 1. 数据结构: - 数组:基础的数据集合,支持索引访问。在JavaScript中,数组...

    demo:Laravel的工作演示,其中安装了所有Backpack软件包

    | | | | | | |背包\ Demo Laravel BackPack的演示,其中包括所有背包包装。安全更新和重大更改请订阅背包新闻,以了解有关任何安全更新,重大更改或主要功能的信息。 我们每1-2个月发送一封电子邮件。 如何使用您...

    IllustratedAlgorithms交互式可视化算法

    5. 动态规划:如背包问题、最长公共子序列等,通过矩阵或表格的填充来体现状态转移的过程。 此外,该应用可能还提供了用户交互功能,比如暂停、快进、快退,以及自定义输入数据,让学习者可以根据自己的节奏和需求...

    spa:这是我的单页应用程序库。 它与背包搭配

    SPAjs 是一个 JavaScript 库,用于管理单页 Web 应用程序的路由和视图转换。 您可以在 [高性能单页 Web 应用程序] ( )。 SPAjs 应该与 (backpack)( ) 结合使用,后者在 localStorage 中保留视图和模板。 当 ...

    algorithms-website:CS中最流行的算法

    4. 动态规划:用于解决具有重叠子问题和最优子结构的问题,如背包问题、最长公共子序列、斐波那契数列等。动态规划可以有效地避免重复计算,提高效率。 5. 分治策略:如归并排序、快速排序等,将大问题分解为小问题...

    algorithm-demo

    项目中可能包含了经典的DP问题,如背包问题、最长公共子序列等。 "algorithm-demo-master"这个压缩包文件名暗示了这是项目的主要代码库,包含了上述所有算法的实现源码。通过学习和理解这些示例,开发者可以加深对...

    dynamic-prog:动态编程实例

    例如,解决背包问题或最长公共子序列问题时,可以创建一个二维数组,逐行或逐列填充,确保每个单元格只计算一次。 在JavaScript中实现动态编程时,需要注意变量作用域、数组操作的性能以及如何有效地利用内存。动态...

    visualisations:学习算法的交互式可视化

    此外,对于动态规划问题,如背包问题或最长公共子序列,用户可以观察状态转移矩阵的变化,理解动态规划背后的思路。 **学习资源与教学辅助** "visualisations"不仅是个人学习的优秀工具,也是教学辅助材料。教师...

    hsu:HSU游戏,演示在

    对话框提供子问题和答案的多种选择。 还循环播放背景音乐。 有关下一步功能的详细信息,请参见我们的。 在本地启动游戏 下载并安装 下载存储库(git clone) git clone https://github.com/micahh2/hsu 更改...

    backpack-moon:这是一个在线购物袋销售网站的着陆页

    【标题解析】:“backpack-moon”这个标题很可能是指一个以“背包”为主题,结合了“月亮”元素的在线购物平台。它可能旨在提供一种独特的购物体验,将户外探险、旅行或者与月亮相关的主题与商品销售相结合。 ...

    algorithm-visualizer-master.zip

    算法可视化工具涵盖了多种类型的算法,包括但不限于排序(如冒泡排序、快速排序、归并排序)、查找(如二分查找、哈希查找)、图算法(如Dijkstra最短路径、Floyd-Warshall所有对最短路径)、动态规划(如背包问题、...

    Java数据结构与算法中的源代码和applet

    如背包问题、最长公共子序列等。 5. **图算法**:如深度优先搜索(DFS)、广度优先搜索(BFS)、Dijkstra最短路径算法、Floyd-Warshall所有对最短路径算法等。 Applet是Java早期的一种Web应用形式,它可以嵌入HTML...

    algovisualizer:可视化最常见的算法

    5. **动态规划**:如背包问题、最长公共子序列等。动态规划是解决复杂优化问题的常用方法,algoVisualizer通过表格形式展示状态转移过程,帮助学习者把握其精髓。 6. **数据结构**:包括数组、链表、栈、队列、堆、...

Global site tag (gtag.js) - Google Analytics