性能优化实战-逻辑运算and和or优化

性能优化实战-逻辑运算and和or优化

依据

逻辑运算中,and,也就是”与“,代表必须所有条件为真,结果才为真,也可以理解为,只要有一个条件为假,结果就为假

逻辑运算中,or,也就是“或”,代表只要有一个条件为真,结果即为真

利用这两个特性,我们在编程中,可以进行时间复杂度优化

如何优化?

答案是,将时间复杂度较低的操作,放在逻辑运算符的最左边。

原因:

只要and表达式第一个结果为,则后面的操作则略过;

只要or表达式第一个结果为,则后面的操作也略过。

来看代码例子

没有经过优化的代码:

import timeit

def find_member(arg_arr):
    dist_arr = ["Jan.", "Feb.", "Mar.", "Apr.", "May.", "June.", "July.", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."]

    for i in arg_arr:  # 循环遍历元素,时间复杂度为O(n)
        if i in dist_arr:  # 每个元素都要做一次成员判断,时间复杂度为O(n),有N个元素,则总的时间复杂度为O(n^2)
            print("找到成员", i)


if __name__ == "__main__":
    my_arr = ["a", "b", "c", "Jan", "June.", "Oct."]
    start = timeit.default_timer()
    find_member(my_arr)
    print("%0.9fs" % (timeit.default_timer() - start))
    
    输出:
    找到成员 June.
    找到成员 Oct.
    0.000042272s

经过优化的代码:

import timeit

def find_member(arg_arr):
    dist_arr = ["Jan.", "Feb.", "Mar.", "Apr.", "May.", "June.", "July.", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."]

    for i in arg_arr:  # 循环遍历元素,时间复杂度为O(n)
        # if i in dist_arr:
        if i[-1] == "." and i in dist_arr:  # 首先做下标取值和判断操作,时间复杂度为O(1),如果结果为假,则后面的成员判断操作O(n)则略过。总的时间复杂度小于O(n^2)。
            print("找到成员", i)


if __name__ == "__main__":
    my_arr = ["a", "b", "c", "Jan", "June.", "Oct."]
    start = timeit.default_timer()
    find_member(my_arr)
    print("%0.9fs" % (timeit.default_timer() - start))
    
    输出:
    找到成员 June.
    找到成员 Oct.
    0.000018173s

结语

这里只是举例,数据体量并不大,看到的时间优化提升比较小,但是,线上高并发系统加上庞大的数据体量,这个提升,就是显而易见的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值