竞技编程中的 Python
原文:https://www . geesforgeks . org/python-in-competitive-programming/
2017 年,当 ACM 允许 Python 支持其享有盛誉的竞赛——ACM ICPC 时,一个全新的社区对竞技编程这项运动产生了兴趣。这意味着更多的人回归基础,学习算法,这些算法是他们用来构建高级包的复杂包的构建块。 不幸的是,关于如何有效地使用数据结构,甚至 python 的作用域规则的信息并不多,这导致人们认为 python 不适合竞争性编程。 今天我将向您展示 python 有时由于其惊人的库而比 C++或 Java 更强大,以及它实际上可以有多简单。
让我用一个简单的例子来演示,看看下面的代码片段-
alphabets = ['a', 'b', 'c']
for item in alphabets:
len(item)
alphabets = ['a', 'b', 'c']
fn = len
for item in alphabets:
fn(item)
你可能会认为我给函数“len”分配了一个别名,这可能没什么区别。 所以我写了一个性能测试函数如下。
import datetime
alphabets = [str(x)for x in range(10000000)]
a = datetime.datetime.now() # store initial time
for item in alphabets:
len(item)
b = datetime.datetime.now() # store final time
print (b-a).total_seconds() # results
a = datetime.datetime.now()
fn = len # function stored locally
for item in alphabets:
fn(item)
b = datetime.datetime.now()
print (b-a).total_seconds()
我鼓励你在你的系统上尝试它。 这是我运行 performance.py 脚本的输出。
差不多一半!
好了,现在让我们来分析一下为什么会发生这种情况。原因?查找函数是一项昂贵的操作。 在第二个代码片段中,我将函数直接存储在函数的作用域中,所以无论我调用它多少次,每次运行时都确切地知道它必须在哪里寻找结果。
Itertools 如果你去过 codeforces,你现在知道很多编程挑战都涉及到回溯。所以今天我将告诉你一个库,它使用一个内置的库包来生成所有的排列和组合,速度非常快。Itertools 如果你想用 python 解决算法难题,那么 itertools 是你必须探索的库。 生成所有排列–
from itertools import permutations
perm = permutations([1, 2, 3], 2)
for i in list(perm):
print i
# Answer->(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)
组合()函数的行为类似,我鼓励读者自行尝试。
只有当您的代码没有成功利用 Python 的强大功能时,python 才是一种缓慢的语言。如果你是一个 python 程序员,不要觉得自己处于劣势,它实际上非常简洁而且非常快速!
版权属于:月萌API www.moonapi.com,转载请注明出处