在这个视频中, 我们将探索如何使用聊天, GPT和算法
让我们从一个简单的素数例子开始
所以GPT你能给我写一个Python脚本斜杠算法吗？
生成直到给定数x为止的所有素数
所以希望它能为Python中的一个函数创建某种定义, 该函数接受X作为参数
果然, 这就是它的作用
它将此标记为Python脚本
这是一个叫做生成素数的函数, 它接受一个X作为参数, 看看这个.
它甚至记录了它正在编写的代码
所以这是一个使用Eratosthenes筛子的算法
我不知道我说的对不对, Eratosthenes用算法生成了所有的素数直到给定的数X,
所以我们可以通过运行它来测试它的正确性.
也许我们不能够完全地进行事实检查, 因为正如一位著名的计算机科学家曾经说过的那样,
像测试用例或检查某些输入和某些输出只能显示错误的存在, 但不能证明错误的不存在或不存在
所以我不知道这是否完全稳健, 但我们可以尝试用一些数字来检查它, 看看它是否有效
好吧
这就是Python代码
让我们来看看VS代码
在我的终端里, 我的系统里安装了Python
让我们运行python
我现在在Python终端里
让我放大一点
所以这是一个Python终端, 只要在命令行上运行Python, 因为我已经安装了它,
我可以继续输入这些代码
如果你输入这个
把这个贴进去
实际上我们会看到一个意外的缩进
所以让我们实际上继续并为此创建一个文件, 只是为了使事情更容易
我们把它叫做质数点π
如果我复制这段代码, 这就是函数声明
就像他们在这里说的, 这里有一个函数的示例用法, 可以生成直到20的所有素数
所以它肯定会包含一个函数调用来生成素数20, 然后打印输出
果然, 这很有道理, 对吧？
这些是到20为止的质数
所以如果你真的继续运行它, 如果我退出我的终端, 然后用π·素数运行这个文件,
我们可以看到这实际上是输出, 对吗？
我们可以尝试更大的数字
让我们疯狂地投入一百万, 希望这不会花太长时间
但是, 是的, 这是一个很大的输出在那里
我想我的电脑在这方面是相当快的, 所以是的, 这是很多
好多数字啊
我不知道, 如果这些是质数, 我想这个算法是正确的,
经过测试的, 这是一件好事, 如果你要求它提供一个完善的算法,
这将是一个非常好的记录和证明, 这将是已经存在的代码
所以这是它可能不会出错的东西, 因为有一个很好的可靠的解释来解释这个东西是如何工作的,
实际上还有其他算法用于生成素数
所以有趣的是, Chalkbeat碰巧给了你一个非常知名和高效的
你能用算法吗？
除了埃拉托斯特尼的种子, 如果我拼写正确的话
希望我做到了
当然, 这里有一个尝试除法算法的实现, 可以在Python中生成直到给定数字X为止的所有素数
所以这将是一个完全不同的函数定义, 但它可能会给我们相同的输出,
在生成所有素数方面, 直到一个给定的数字
但是, 是的, 让我们让我们继续下去, 并给一个尝试
好吧, 既然我们在这里
所以在这里我们已经得到了C的定义, 角鲨烯的定义
让我们给这个函数加上前缀, 调用一个筛子, 这样我们就不会调用它了
这里我们要调用新的生成素函数
如果我们称之为20, 它应该给我们同样的输出
二三五七十一十三十七十九
所以如果我继续运行它, 就足够了
是的, 这正是它给我们的
如果你不熟悉计算机科学, 也不熟悉写代码的研究,
那么关于算法的一个有趣的事情是, 首先, 这些算法是可以被测量的
所以这两件事是空间和时间复杂度
我们来问一下, 这其实是一个脚注, 注意试除算法在生成素数时,
效率不如C, 特别是对于大的X值
让我们来试试看
因为之前我们在这个函数的C版本上运行了一百万次
让我们试着用generate primes来运行它
你可以看到这花了更长的时间才出来, 对吧？
所以它肯定给了我们同样的答案
然而, 你可以看到我的电脑确实停了一两秒钟
所以让我们来问GPT为什么会这样, 你可能会问为什么会慢一点
这可能是个幼稚的问题, 但如果你熟悉算法背后的理论, 你可以问它空间是什么？
这两种算法的时间复杂度是多少？
让我们看看你能不能告诉我们, Eratosthenes的Steve算法的时间复杂度,
来生成所有的素数, 直到一个给定的数
X是X的大O乘以X的对数的对数定律和最坏的情况
所以如果你不明白这意味着什么, 大O符号是一种描述算法运行时复杂度的方法,
这里有很多需要理解的地方
但是我们在这里看到, 试除法算法的复杂度是O的X的1次方 最坏的情况下是5, 这是相当糟糕的,
对吧？
所以如果你考虑这两个图
所以如果你看一个图, 函数是输入大小和算法完成所需时间的函数,
那么这个图的增长速度会比这个图慢得多,
对吧？
所以这个会爆炸
所以当你的X增加时, 算法完成所需的时间会急剧增加, 因为它就像指数一样,
对吧？
它是某种力量的象征
所以, 是的, 我们可以看到为什么这是一样的, 为什么一个比另一个花更长的时间？
如果你想了解更多, 我们可以继续聊天, 继续提问
对吧？
如果你对学习充满好奇, 并且知道该问什么, 这些东西就会非常有效