algorithm - 从数组中查找每对整数的绝对差的乘积
问题描述
给定一个数组,求每对整数的绝对差的乘积。
例如:给定a[]= {2,3, 5, 7 };
输出将是(3-2) * (5-2) * (7-2) * (5-3) * (7-3) * (7-5) = 240。
它可以做得比 O(n^2) 更好吗? 编辑: 所有元素都是不同的。
解决方案
如果您必须计算绝对差异的总和,那么这将是您的解决方案
基本上,如果你取一个任意数字,让我们将它命名为 x,那么你就有了
m * x - n * x,
其中 m 是小于 x 的项目数,n 是大于 x 的 n 个项目数。所以,如果由于某种原因你有一个排序数组,那么每个项目的索引会直接告诉你如果它在数组中是唯一的,那么它有多少更大或更小的项目。如果没有,那么您也可以确定较高和较低元素的数量。
因此,如果数组已排序,则计算结果是线性的。如果您使用归并排序,则对完全未排序的数组进行排序是 n * log(n) 的复杂度。因此,复杂度为
O(n + n * log(n)) = (n + 1)log(n)
但是对于绝对差异的乘积
你有一个形式的产品
(a1 - b1) * ... (...)
由于您有减法乘积,为了找到可用于优化的模式,您需要有关数据的更多信息。您的输入似乎包含素数。的产品
(a1 - b1) * (a2 - b2)
是
a1a2 - a1b2 - b1a2 + b1b2
我不知道可以用于优化的任何模式,所以我认为这具有 O(n^2) 复杂性。
推荐阅读
- bash - Jenkinsfile 没有执行整个 shell 脚本
- c++ - 是否可以使用符合 C++17 的 C++14 创建迭代器?
- ios - 您通常如何在 iOS 键盘上显示此“密码”按钮?
- sql - sql developer更改连接密码
- javascript - db.all 函数不作为数组变量返回
- html - SVG 在加载时超大,直到 CSS 启动
- python - 为什么 Python 列表乘法会创建一个包含多个元素的列表?
- javascript - Javascript如何使用window.open将变量传递给URL查询
- xampp - Orangescrum 卡在数据库配置:错误的数据库信息。请尝试使用正确的信息
- ios - Xcode 错误:此时无法安装此应用