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 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.