【发布时间】:2018-06-26 15:13:02
【问题描述】:
我需要优化我的算法,以计算数组(未排序)中比给定数字更大/更小/相等的数字。
我必须这样做很多次,给定的数组也可以有数千个元素。
数组不变,数字在变
例子:
数组:1,2,3,4,5
n = 3
- 的数量
- >的数量:2
- ==:1 的数量
第一个想法:
遍历数组并检查元素是否>或O(n*k)
可能的优化:
O((n+k) * logn)
首先对数组进行排序(我使用c qsort),然后使用二进制搜索找到相等的数字,然后以某种方式计算越来越小的值。但是该怎么做呢?
如果元素存在(bsearch 返回指向该元素的指针)我还需要检查数组是否包含此元素的可能重复项(因此我需要检查此元素之前和之后,而它们等于找到的元素),然后使用一些指针操作来计算更大和更小的值。 如何获得具有指向相等元素的指针的更大/更小的值的数量? 但是如果我没有找到值怎么办(bsearch返回null)?
【问题讨论】:
-
如果你只需要一个/几个
n,那么你的“优化”实际上就是“去优化”。 -
排序,运气好,算法是 O(n logn),之后你做什么都会让情况变得更糟。扫描一次数组,增加三个计数器,将是 O(n)。您想要实现的优化在哪里?
-
但在最好的情况下(没有重复)我认为我节省了很多时间
-
你认为?那就证明吧。这些东西有一个完善的科学记数法。
-
所以..您实际上已经接受了答案并将其编辑到问题中,使所说的一切无效....并且几乎消除了问题本身的意义。现在还不清楚你在问什么。
标签: c arrays algorithm optimization binary-search