技术文章和资源

技术文章(时间排序)

热门类别

Python PHP MySQL JDBC Linux

Python - 非重叠随机范围

pythonserver side programmingprogramming

当前问题是借助 Python 找到非重叠随机范围。有时在 Python 中,我们需要提取非重叠的随机范围。此应用程序在处理数据时会很有帮助。

理解问题

在此问题陈述中,我们将获得三个参数,如起始值、结束值以及数字范围。因此,基于这些值,我们必须使用 Python 生成非重叠随机范围。假设起始值为 1,结束值为 50,数字范围为 2,则输出将为 [(8, 13), (43, 47)]。

上述问题的逻辑

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

算法

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

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

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

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

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

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

示例

# 导入随机模块
import random

# 定义函数以生成非重叠范围
def get_ranges(begin, end, num_ranges):

   # 初始化一个空对象
   random_ranges = []
    
   # 迭代
   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
   
# 初始化变量
begin = 10
end = 500
num_ranges = 5

# 调用函数
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 生成不重叠随机范围的直接方法。此场景可用于在给定范围内生成一组不同的范围。


相关文章