我正在尋找一些幫助以找到合適的演算法。
這是我的問題:
我有三組數字。每個集合代表一個偏好,由 n 個變陣列成。我想檢查所有集合中的所有變數,并從可能的最高集合中輸出從最高總數中落入給定閾值內的變數串列。
第 1 組:首選 第 2 組:次優 第 3 組:最后的手段。
門檻:50
示例 1:
set 1: 100, 110, 120
set 2: 60, 70, 151
set 3 10, 20, 30
應輸出:
110, 120
取自第 1 組。不應包括 100,因為總體最高數 (151) 之間的差值大于 50 的閾值
示例 2:
set 1: 100, 110, 120
set 2: 100, 120, 161
set 3: 40, 50, 60
應輸出:
120
取自集合 1。100、110 不應包括在內,因為它們與 161 之間的差異超過了 50 的閾值。
示例 3:
set 1: 100, 110, 120
set 2: 151, 161, 100
set 3: 110, 120, 130
應該輸出:
120
即使151和161都高于集合1中的所有數字,但仍有一個數字在50的閾值之內,即120
示例 4:
set 1: 100, 110, 120
set 2: 151, 161, 200
set 3: 130, 140, 150
應該輸出:
151, 161, 200
最后一個例子:
set 1: 100, 110, 120
set 2: 151, 161, 171,
set 3: 100, 200, 300
應該輸出:
200, 300
沒有選擇 100,因為它小于最高數字 (300) 的閾值,即使它在同一個集合中。
將不勝感激任何幫助。
謝謝!
uj5u.com熱心網友回復:
這個問題不是特別微妙,不需要任何特定的資料結構。
- 找到最大元素;
- 在第一組中找到上面的元素
maximum - threshold; - 如果您在上一步找到了至少一個元素,則回傳找到的元素;
- 否則,重復第二組;然后是第三組。
python中的示例:
def find_preferred_numbers(s1, s2, s3, threshold=50):
m = max(max(s1), max(s2), max(s3)) - threshold
for s in (s1, s2, s3):
results = [x for x in s if x >= m]
if len(results) > 0:
return results
return []
examples = [
[[100, 110, 120],
[60, 70, 151],
[10, 20, 30]],
[[100, 110, 120],
[100, 120, 161],
[40, 50, 60]],
[[100, 110, 120],
[151, 161, 100],
[110, 120, 130]],
[[100, 110, 120],
[151, 161, 200],
[130, 140, 150]],
[[100, 110, 120],
[151, 161, 171],
[100, 200, 300]]
]
for i, (s1,s2,s3) in enumerate(examples, start=1):
result = find_preferred_numbers(s1,s2,s3)
print('example {}: {}'.format(i, result))
# example 1: [110, 120]
# example 2: [120]
# example 3: [120]
# example 4: [151, 161, 200]
# example 5: [300]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485227.html
