首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这可以在O(logN)复杂度内完成吗?

这可以在O(logN)复杂度内完成吗?
EN

Stack Overflow用户
提问于 2018-08-12 03:24:51
回答 1查看 445关注 0票数 0

您正在处理一个项目,并且您注意到在两个版本之间存在性能下降。你有一个函数:

代码语言:javascript
复制
boolean worseCommit(int commit1, int commit2) 

它运行性能测试,如果commit2比commit1差,则返回true,否则返回false。

找出所有降低了两个版本之间性能的错误提交。假设性能没有提高。

提交Id:1, 2, 3, 4, 5, 6, 7, 8, 9

性能:10, 10, 10, 8, 8, 8, 5, 5, 5

输出4, 7

EN

回答 1

Stack Overflow用户

发布于 2018-08-12 06:12:54

对于k=0,这可以在O(k=0(n/k))和O(1)中完成,其中k是较慢发布的数量。对于只有一个错误版本的特殊情况,它将需要O(log )操作。

类似于n.m.已经注意到,如果k=n或k未指定,则运行时变为O(n)。

代码语言:javascript
复制
def bad_releases():
    slow = []
    add_slow(slow, 0, num_commits - 1)
    return slow

def add_slow(slow,  min, max)
    if not worseCommit(min, max):
        return
    if min + 1 = max:
        slow.append(max)
        return
    mid = (min + max) / 2
    add_slow(perf, slow, min, mid)
    add_slow(perf, slow, mid, max)

请注意,如果每个版本都变得更糟,那么对slow的插入最多只能运行O(n)。请注意,递归不会继续到没有减速的段中。

我们可以知道在给定的时间间隔内没有减速,这要归功于发布永远不会变快的事实。因此,如果区间的两端具有相同的性能,则意味着整个区间具有相同的性能。

编辑:使用提供的worseCommit函数(而不是performance列表),使O表达式更紧凑,修复了缩进,添加了有关k=0的O()的说明,并修复了一个拼写错误(缺少参数)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51803009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档