学习算法时如何使用python?

学习算法时如何使用python?,python,algorithm,sorting,Python,Algorithm,Sorting,基本上,我正在尝试使用python学习一些非常基本的数据结构和算法。然而,我认为在尝试实现这些算法时,我在不知不觉中开始使用一些python技巧,即使像下面这样简单,也不会被任何想象所认为是技巧 对于i,枚举(arr)中的项: #算法实现 或 如果项目中的项目: #做点什么 我不知道应该遵循什么样的一般准则,这样我才能掌握算法要实现的内容。它们不是把戏 这些都是你在任何其他语言中都会做的事情。它只是在python中变得更简单了 在c/c++中 for(int i=0; i<sizeof

基本上,我正在尝试使用python学习一些非常基本的数据结构和算法。然而,我认为在尝试实现这些算法时,我在不知不觉中开始使用一些python技巧,即使像下面这样简单,也不会被任何想象所认为是技巧

对于i,枚举(arr)中的项:
#算法实现

如果项目中的项目:
#做点什么
我不知道应该遵循什么样的一般准则,这样我才能掌握算法要实现的内容。

它们不是把戏

这些都是你在任何其他语言中都会做的事情。它只是在python中变得更简单了

在c/c++中

for(int i=0; i<sizeof(arr)/sizeof(arr[0]); i++) {
     // access the array elements here as arr[i]
}

您的算法将不依赖于这些语法差异。 无论是python、c/c++还是任何其他语言,如果您对该语言有很好的理解,您都可以使用任何东西。您只需记住所使用算法的时间复杂性以及如何实现它们

python的优点是它更容易理解,编写时间更短,有很多内置函数,不需要类或主函数来执行程序等等

如果你问我,我不会说这是什么把戏。所有编程语言都有这些共同点,只是语法上的差异


这取决于您试图实现什么。比如说,如果您试图实现链表,您只需要知道在python中可以使用什么来实现它。

使用python的技术来解决问题是可以的。主要的例外是,Python为您做了一些事情,您希望了解这些事情是如何完成的。一个例子是——如果您的目的是了解如何使用二进制堆结构来实现优先级队列,则不能直接使用它。当然,您可以阅读源代码并通过这种方式学到很多东西

可以帮助您的一件事是阅读一本基于Python的数据结构和算法书籍。然后您可以放心,Python不会被用来在重要的主题上滑动——至少,如果这本书很好的话

一本这样的书是。另一个是。第一本书是免费的PDF下载,不过我相信还有一本不是免费的最新版本。第二个不是免费的,但如果您使用折扣代码,您可以在获得40%的折扣。我现在正在读后一本书,以提醒我很久以前上的课


至于建议,价格可能是您的决定因素。这两本书的侧重点也不同。第一个版本比较旧,使用更通用的Python,而没有使用Python的许多特殊功能。它也更接近教科书,在主题上更深入。例如,它涵盖了诸如执行复杂性之类的内容。然而,PDF版本没有我见过的其他版本涵盖的主题那么多。PDF不包括图形(网络),例如,另一个版本(我现在找不到)不包括图形(网络)

第二个更为新,使用了Python3.7的特性,例如类型提示。它更像是一个介绍或回顾。我想我可以用“合理使用”来引用本书的相关章节:

这本书是给谁的?

本书面向中级和有经验的程序员。 希望加深Python知识的经验丰富的程序员 将从他们的计算机科学或软件中找到熟悉的问题 程序设计教育。中级程序员将被介绍到 这些经典问题在他们选择的语言:Python中得到了解决。 准备编写代码的开发人员可能会发现这一点 这本书是有价值的准备材料

除了专业的程序员,学生们还参加了 对Python感兴趣的本科计算机科学课程 你可能会发现这本书很有帮助。它没有试图成为一个 严格介绍数据结构和算法。这不是一个好主意 数据结构和算法教科书。你找不到证据或证据 在其页面中广泛使用大O符号。相反,它是 定位为一个可接近的,实际操作的教程 解决问题的技巧应该是学习的最终产物 数据结构、算法和人工智能类

再一次,假定您了解Python的语法和语义。A. 拥有零编程经验的读者不会从中得到什么好处 一个没有Python经验的程序员几乎可以 当然是斗争。换句话说,经典的计算机科学问题 《Python语言》是一本面向Python程序员和计算机工作者的书 理科学生


如果您想了解算法是如何工作的,我强烈建议您使用。它们将算法过程表示为算法所用的基本逻辑语句之间的关系,并且独立于算法可能实现的编程语言

如果您想同时学习python,那么以下是您可以做的:

1.研究您感兴趣的算法流程图。 2.将流程图1:1转换为python代码。 3.仔细查看python代码,并尝试对其进行优化或压缩。
最好用一个例子来说明这一点:

1. 以下是欧几里德算法的流程图,该算法可以找到两个数字的最大公分母(取自wiki页面):

理解算法意味着能够遵循甚至复制此流程图

2. 现在,如果您的目标是学习python,那么一个很好的练习就是制作流程图并将其转换为python。没有捷径,没有简化,只需1:1就可以将算法转换为python你会
for i, a in enumerate (arr):
    # do something
for i in range(len(arr)):
     # do something with arr elements