问题标签 [partition-problem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
284 浏览

algorithm - 2 个运输商的最短交货时间

我正在处理一个算法问题。我有一个具有单个中心节点的已知图形算法。目的是通过两个运输商将货物从这个中心节点运送到其他一些指定的节点。每个运输机最多可以携带。一个单位的货物,以便在每个节点访问后返回中心节点进行下一个。我应该计算尽可能短的时间来做到这一点。

我的方法是对中心节点使用dijkstra 算法,考虑到节点之间的不同距离,找到通往所有其他节点的最短路径。然后对于运输者应该去的所有节点(有时甚至不止一次到达特定节点),我将值加倍,因为来回的距离。我将值分成两组,总和尽可能接近,因为有两个传输器,并打印更大的一个。

然而,解决方案似乎并不完美。我需要另一个东西来构建它。如果第一个运输者知道他结束了工作,比方说提早 8 个单位,他可以在交付期间的某个时候为途中的第二个运输者准备一个货物,这样他就不必等到中心节点才来取货,但要少一点。那么他们的总时间将相等,但考虑到两者都更短。不幸的是,这并不总是可能的(例如,只有一次交付到一个节点等)。我需要将此方面添加到我的程序中。

0 投票
2 回答
731 浏览

scheme - 在 Scheme 中创建集合的分区

我对整体计划还是很陌生,在确定学校作业时遇到了一些问题。所以请不要完整的答案,只是寻找一点见解或朝着正确的方向轻推,这样我就可以自己解决这个问题。

问题如下:给定一个数字列表,确定两个子集是否可以从这些相等的总和和项目数组成。例如,如果给定的集合是 (1 1),那么我的程序应该返回 #t,否则返回 #f。

这是我到目前为止所写的(即使它目前没有输出)

我的函数应该递归地将项目添加到子集 1 (s1, l1) 或子集 2 (s2, l2),直到它达到确定子集大小和总和是否相等的基本情况。我觉得我的逻辑在那里/关闭,但我不确定如何在方案中正确实施这些想法。

编辑我应该补充一点,作为作业的一部分,我必须使用递归。我希望 DrRacket 提供更多调试信息,因为当我点击运行时它没有给出错误,但也没有输出。

0 投票
1 回答
1049 浏览

algorithm - 没有循环的分区算法,只有递归

给定一个整数列表。找出它是否可以分成两个总和相等的子列表。列表中的数字未排序。

例如:
像 [1, 2, 3, 4, 6] 这样的列表将返回 true,因为 2 + 6 = 1 + 3 + 4 = 8
像 [2, 1, 8, 3] 这样的列表将返回 false。

我在一个在线练习平台上看到了这个问题。我知道如何使用 for 循环 + 递归来解决它,但是如何在没有循环(或迭代器)的情况下解决它?

0 投票
1 回答
448 浏览

sql - 在 Oracle 中使用分析函数进行分组

我有一个包含列的表格:

  • col1(主键)数字
  • col2number - 包含少量重复项

该表包含 600 条记录。我正在尝试构建一个查询,用户可以在其中提供任何组计数(组中的最大记录数。例如:11)。结果将是具有组号的总记录。这里相同的数据col2不应该在两个不同的组中。

示例——考虑这个查询:

此查询将给出组号,但我发现很少有具有相同数据的记录落入不同的组。

有什么方法可以解决我的分析函数问题吗?


这是一个数据样本和预期结果

数据样本

如果组大小为 4,我希望结果如下

预期结果

我的任务是将学生人数分成四组,但两组不应有相同排名的学生

0 投票
2 回答
262 浏览

algorithm - 基于玩家偏好的团队创建算法

我正在制作一个匹配客户端,将 10 人匹配成两个团队:

每个人选择他们想玩的四个人,从高到低排列。

然后从该集合中最强大的关系中形成两个团队。

您将如何创建解决此问题的算法?

例子:

这个问题表面上看起来很简单(毕竟它只是一个牵线搭桥的客户端),但想了想,似乎需要考虑到相当多的关系。

编辑(从评论中粘贴):理想情况下,我会避免使用蛮力方法扩展到需要 100 名玩家和 25 支球队的大型游戏,其中选择你喜欢的队友将通过搜索功能完成。我知道这个系统可能不是最好的 - 但是,这是一个有趣的问题,我想在学习的同时找到一个有效的解决方案。

0 投票
10 回答
7023 浏览

python - 检查一个数字是否可以划分为素数分区

有人可以在 Python 上解决这个问题吗?

如果一个正整数 m 可以写成 p + q,其中 p > 0,q > 0 并且 p 和 q 都是素数,则它可以被划分为素数。

编写一个 Python 函数,将整数 m 作为输入,如果 m 可以被划分为素数,则返回 True,否则返回 False。

试过这个,但不适用于所有测试用例,例如它应该为 3432 返回 True,它返回 False。

0 投票
2 回答
209 浏览

algorithm - 给定一个整数数组,创建分区,其中每个分区中的元素总和为 0,并且形成的最大分区数

我的规则:

  • 允许重复
  • 显然允许负数
  • 由于我提到了分区,这意味着您不能将数组中的元素放在超过 1 个分区中
    • 分区中的元素是子集/不需要是连续的数组块
    • 输入数组中的元素未按排序顺序
    • 输入数组中所有元素的总和将为 0(给定条件)

示例:如果 A = {-2,-4,-6,+6,+6} 那么 B={{-2,-4,6},{+6,-6}} 是最大 no 的结果分区数

仅供参考,我想返回所有分区而不是分区数。

根据我的研究,这似乎是一个 NP-hard/complete 问题。但我不确定,如果有人能解释最好的解决方法(即使它很慢),我将不胜感激。一些伪代码也会受到赞赏。

谢谢你。

0 投票
1 回答
54 浏览

python - 打印与我要附加到的数组不匹配

我正在尝试创建一个函数,该函数接受一个数字数组,并在两个数组中为您提供这些数字可以包含的每个组合。

我的问题是我可以打印我想要的确切结果,但是当我尝试将结果保存到变量中时,出于某种原因,我的数组中出现了相同的子数组。

这是代码:

预期的:

实际的:

0 投票
3 回答
419 浏览

php - 如何划分三个类别的组合?

我有一个包含 3 类食谱的数组,早餐、午餐和晚餐。这些类别中的每一个都有 10 个独特的食谱。

我想为每天排序并创建 3 个食谱的组合

每个食谱都有一个卡路里量,并且每个最后一天都应该有一个组合(包括 1 份早餐、1 份午餐和 1 份晚餐)与按最接近 500 的 3 份食谱组合订购的食谱

例如,如果第 1 天的组合食谱(早餐、午餐和晚餐)卡路里总计 660,而第 2 天为 400。可能将早餐从第 2 天切换到第 1 天可能会使两者都达到最接近 500,但也有可能将第 3 天的早餐切换到第 1 天,将第 2 天的早餐切换到第 3 天,这可能会使所有 3 人的命中率也接近 500。

所以第 1、2、3、4、5、6 和 7 天应该有 3 个食谱(早餐、午餐和晚餐)

自从我陷入僵局已经有好几天了,我不知道如何将这些数组排序为每天 3 个的组合。(我知道我没有提供很多代码)

编辑1:这是我到目前为止所得到的:

编辑2:

我试图找出最适合解决这个问题的算法。我认为使用二分匹配(最大)算法可能是我需要的。

编辑3:

感谢大家花时间提供帮助,我没有忘记答案。我不得不暂时把它放在一边,但很快我就会得到它,并且接受的答案将获得我剩余的 300 赏金。

0 投票
0 回答
29 浏览

algorithm - 给定一个数组并将它们分组为可能的总和

给定一个数组并将它们分组为可能的总和。

仅输入此数组:[1,2,3,4,5]
输出:{[5,1] [4,2]} {[3,2] [4,1]}

有没有办法在不使用for循环嵌套的情况下解决这个问题?