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 生成不重疊隨機範圍的簡單方法。此場景可用於在給定範圍內生成一組不同的範圍。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP