如何找到最优化的if语句序列?

时间:2019-02-14 08:40:55

标签: python if-statement optimization

我有很多if语句,我想为它们找到最优化的顺序。

每种情况的时间复杂度都不同,并且触发时间也不同。例如,case1可能是Θ(n^2)的{​​{1}}与case3的比较,但是第二个会更早地停止该功能,因此最好将其放在第一位。

我将如何寻找最有效的方式来对if语句进行排序?

Θ(log(n))

3 个答案:

答案 0 :(得分:1)

要做出明智的设计决策,您需要定义目标:

  1. 如果函数应尽可能快地返回,则最快的情况可能应该排在首位。
  2. 但是,如果您希望函数对所有输入数据平均快速返回,那么您可能需要知道哪种情况更有可能出现在输入数据中;如果您希望输入最多的数据,那应该是第一个。这样,可以减少该函数的平均运行时间。

但是要做出最佳决定,您需要考虑很多因素:

  • 数据类型(集合,列表,字符串等)
  • 输入的大小以及该函数将被调用多少次
  • 在每种情况下执行的操作(例如搜索,繁重的计算,简单的算术运算...)
  • 调查在您的案例中包含尽可能多的短路条件以使它们尽早失效的可能性

如果您需要更多帮助,则应该为您的问题提供更具体的信息。

答案 1 :(得分:1)

您的目标是什么?是减少平均时间,最坏情况的时间还是其他措施?

最短平均时间: 如果您具有有关每种情况所需时间,其相对概率和不满足条件的时间的统计信息,则可以计算每个条件子句的期望值,并选择最佳条件。

(如果适用的话,避免像奥斯汀和沙达布·艾哈迈德(Shadab Ahmed)所提出的那样,避免出现if子句的顺序是一个好主意。)

答案 2 :(得分:0)

如果您想要开关之类的东西,请尝试下面的代码

def f(x):
return {
    'a': 1,
    'b': 2,
}[x]

如果要在所有条件下运行,则可以尝试并行运行这些功能,而最差的时间复杂度将是所有功能的最大值。并行运行Python: How can I run python functions in parallel?

的示例