Python - 不重叠随机范围


手头的问题是利用 Python 找到不重叠的随机范围。有时在 Python 中我们需要提取不重叠的随机范围。此应用在处理数据时将很有帮助。

理解问题

在此问题陈述中,我们将得到三个参数,例如起始值、结束值以及范围数。因此,根据这些值,我们将不得不使用 Python 生成不重叠的随机范围。假设我们有一个起始值为 1,结束值为 50,范围数为 2,那么输出将为 [(8, 13), (43, 47)]。

上述问题的逻辑

为了解决这个问题,我们将使用 Python 的随机模块。因此,我们首先将创建一个函数来执行此任务。并在函数内部,我们将初始化空对象以存储结果值。然后使用循环,该循环将运行直到范围数。我们将使用 random.randint 函数获取开始和结束范围的值。然后将这两个值作为元组追加。

算法

  • 步骤 1 - 首先在程序中导入必要的模块。在我们的程序中,我们使用的是 random 模块。

  • 步骤 2 - 然后定义名为 get_ranges() 的函数。在此函数内部,我们将传递三个参数作为 begin、end 和 num_ranges。

  • 步骤 3 - 接下来,我们将初始化一个名为 random_ranges 的空对象。此列表将存储不重叠的随机范围。

  • 步骤 4 - 将启动一个循环,该循环迭代 num_ranges 次。在此循环内部,我们将使用 random.randint() 函数生成一个名为 range_begin 和 range_end 的随机整数。这些值将显示在给定范围限制内的范围的起始点和结束点。

  • 步骤 5 - 在获得 range_begin 和 range_end 值后。我们将创建一个元组,该元组将表示生成的范围并将此值追加到 ranges 列表。

  • 步骤 6 - 最后,我们将返回不重叠范围的列表以在控制台上显示。

示例

# Import the random module
import random

# Define the function to generate non overlapping ranges
def get_ranges(begin, end, num_ranges):

   # Initialize an empty object
   random_ranges = []
   
   # Iterate
   for _ in range(num_ranges):
      range_begin = random.randint(begin, end)
      range_end = random.randint(range_begin, end)
      random_ranges.append((range_begin, range_end))
   return random_ranges
   
# Initialize the variables
begin = 10
end = 500
num_ranges = 5

# Call the function
non_overlapping = get_ranges(begin, end, num_ranges)
print(non_overlapping)

输出

[(26, 450), (498, 499), (149, 259), (300, 491), (26, 454)]

复杂度

名为 get_ranges() 的函数的时间复杂度为 O(n),其中 n 是 num_ranges 的数量。因为我们已经迭代生成开始和结束数字的两个随机整数,并通过追加这两个值创建了一个元组。此代码的空间复杂度为 O(2n)。

结论

正如我们已经生成了一个使用 Python 生成不重叠随机范围的简单方法。此场景可用于在给定范围内生成一组不同的范围。

更新于:2023 年 10 月 17 日

108 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告