根据偏好和阈值输出数字列表
Output list of numbers based on preference and threshold
我正在寻求帮助以找到合适的算法。
这是我的问题:
我有三组号码。每个集合代表一个偏好,由 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) 的阈值,即使它在同一组中也是如此。
非常感谢任何帮助。
谢谢!
这个问题不是特别微妙,不需要任何特定的数据结构。
- 求最大元素;
- 找出第一个集合中
maximum - threshold
以上的元素;
- 如果您在上一步至少找到了一个元素,return找到的元素;
- 否则,重复第二组;然后是第三组。
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]
我正在寻求帮助以找到合适的算法。
这是我的问题:
我有三组号码。每个集合代表一个偏好,由 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) 的阈值,即使它在同一组中也是如此。
非常感谢任何帮助。
谢谢!
这个问题不是特别微妙,不需要任何特定的数据结构。
- 求最大元素;
- 找出第一个集合中
maximum - threshold
以上的元素; - 如果您在上一步至少找到了一个元素,return找到的元素;
- 否则,重复第二组;然后是第三组。
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]