python - 在Python中计算整数列表中唯一乘法和加法对的数量的有效方法是什么?
问题描述
给定一个排序数组 A = [n, n+1, n+2,... n+k] 元素,我试图计算乘法和加法对的唯一数量,使得条件 xy >= x+y 是使满意。其中 x 和 y 是列表的索引,并且 y > x。
这是我使用天真的蛮力方法的最小工作示例:
def minimum_working_example(A):
A.sort()
N = len(A)
mpairs = []
x = 0
while x < N:
for y in range(N):
if x<y and (A[x]*A[y])>=(A[x]+A[y]):
mpairs.append([A[x], A[y]])
else:
continue
x+=1
return len(mpairs)
A = [1,2,3,4,5]
print(minimum_working_example(A))
#Output = 6, Unique pairs that satisfy xy >= x+y: (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)
然而,这种方法对于大型列表具有指数时间复杂度。
存在哪些排序或搜索算法可以让我实现更有效的解决方案?
解决方案
这个问题有一个封闭形式的数学解决方案,但如果您更喜欢用编程语言来实现,您只需要从您的列表中找到所有唯一的数字对,并计算满足您要求的数字。itertools.combinations
你的朋友在这里吗:
import itertools
A = [1,2,3,4,5]
pairs = []
for x, y in itertools.combinations(A, 2):
if x*y >= x + y:
pairs.append((x,y))
输出
[(2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]
推荐阅读
- azure-api-management - APIM - 响应数据屏蔽
- flutter - 在一段时间内更改按钮颜色
- apache-kafka - 在运行时设置一个spring cloud stream kafka的主题
- python - Python:如何在一个函数中分别绘制不同的图?
- node.js - 我试图创建一个包含三个成员的船命令,可能吗?,我尝试使用下面的代码但不起作用
- spring-boot - 将骆驼与 Google PubSub 组件一起使用会为 com.google.api.client.repackaged.com.google.common.base.Strings 提供 NoClassDefFoundError
- ios - 如何提取自己的智能手机使用数据
- python - numpy python中具有并行编程的矩阵乘法
- python - 理解`pd.DataFrame.div()`和`pd.DataFrame.mul()`
- sql-server - 获取上个月的列是 YYYYMM 数字数据类型