【发布时间】:2018-07-06 14:04:44
【问题描述】:
给定正整数l、k 和n,我有兴趣编写一个函数f(l, k, n),它返回一个随机生成的长度为l 的-k, -k + 1, ..., -1, 0, 1, ..., k - 1, k 中整数序列,加起来为n.
任何想法如何实现这一目标?
编辑:允许重复。理想情况下,解决方案集上的概率分布是均匀的,但我并不十分担心:我更感兴趣的是每次调用函数时都获得一个唯一的解决方案。
【问题讨论】:
-
你有没有尝试过?
-
您必须更具体地说明“随机”的含义。可以想出一个简单的解决方案,随机选择两个数字,第三个使总和
n,其余的l-3等于 0。 -
@RoryDaulton 允许重复。理想情况下,概率分布是均匀的,但我并不十分担心:我对每次运行它时获得唯一序列更感兴趣。如果没有这样的序列是可能的,该函数应该返回 None - 尽管我计划使用值 l、k 和 n,但总会有多个解决方案。
-
FWIW 这个问题似乎与多变量中的线性丢番图方程和子集和问题有关;对这些术语进行网络搜索会找到许多资源。关于生成随机解决方案,如何首先解决 -1 和 1 之间的非整数问题,然后重新缩放并取整数部分并调整结果以相加为 n。
-
@RoryDaulton 实际上,这个问题可以归结为另一个问题。如果您正在寻找一个序列 x_1, x_2, ..., x_l 加起来为 n 且 -k
标签: python algorithm math random integer