如何生成满足某些限制的整数?

Man*_*áoz 2 integer constraints

任何人都可以帮我提供技术来生成满足某些限制的整数.

例如,假设我需要生成整数x和y

      100 > x
and   y < x + 5
Run Code Online (Sandbox Code Playgroud)

我并不是指这个特定的例子,而是一些通用技术来生成满足某些条件的整数.

Joe*_*oey 6

嗯,那并不难:

  1. 选择一个整数,可能是随机的.
  2. 检查你的条件
  3. 如果一个条件失败,则返回步骤1.

如果您的示例中有多个整数,例如xy,请将"整数"替换为"整数".

该技术也称为拒绝采样.

例如,您可以使用一系列链式迭代器来实现它.并且一些约束作为生成器非常有效,例如"小于100的正整数",因此在过滤所有其他约束之前,您可能会开始使用其中一个约束.

我看到的唯一适用于一般限制的其他选项是分析您的约束并生成数字而不需要猜测但知道如何生成它们.对于诸如"0 <x <100"之类的约束,这是微不足道的,但除此之外,它与实现计算机代数系统密切相关.还要记住,你必须同时满足每个约束......长时间拒绝采样会使这种方法成为实施的噩梦.

  • 当然; 虽然出于很多目的,它的效果令人惊讶.另一种选择是将您的条件转换为生成规则,这些规则基本上枚举了可能的组合.但这是非常重要的,很难做到正确.就一般方法而言,没有更多更好的选择. (2认同)