【发布时间】:2015-10-30 04:31:20
【问题描述】:
我有一个大小为 7K 的长字符数组。
char arr[] = "1110010011....." ; // length 7K
我必须对窗口大小为 3 的数组执行累积 OR。 这意味着:
arr[0] | arr[1] | arr[2] ;
arr[1] | arr[2] | arr[3] ;
什么是最好的方法可以比O(n) 少,或者即使复杂性是O(n),我们如何才能让它更快?
【问题讨论】:
-
C 还是 C++?它们是不同的语言。
-
根据您的示例,您需要遍历所有“n”个元素。 O(n) 将是复杂度
-
C++ @Nandu , 为什么-1 我不明白你发现了什么问题.. 同时当我说即使复杂度是 O(n) 我们怎么能做得更快..
-
顺便说一句,我没有投反对票。如果复杂度为 O(n) 并且您同意,那么您所说的更快是什么意思?你在找 O(logn) 吗??
-
我预计重用操作结果会显着提高速度。有一种常用的“求和”技术,可逆运算,如数字
+- 按位计算或不可逆。 如果你有一个大小相同的额外数组(例如,保存结果),你能从先做成对的或得到什么吗? (在现实生活中,像这样保存操作甚至可能会损害性能 - 这可能是学习避免基准测试中最简单的谬误的机会。)
标签: c++ c arrays algorithm bitwise-operators