首页
学习
活动
专区
圈层
工具
发布

陶哲轩:用ChatGPT写代码太省时间了

,n} on which the Euler totient function varphi is non-decreasing....在对话的结果中,ChatGPT 先解释了一番,给出了以下 Python 代码: import math def phi(n): """Compute the Euler totient function...,例如,它能够生成一个非常聪明的程序来计算 totient 函数。...但部分地方也存在计算的偏差。 使用完后,陶哲轩认为结果已经足够好,「我能够使用 GPT 最初生成的代码作为起点手动生成我想要的代码,这可能节省了我大约半个小时的工作。」...相比编写数学证明(这更多地属于我的领域专业知识),我同意你的观点,即 GPT 提供的不完全正确的论证对我来说不会特别有帮助。AI 生成的内容还不如我自己从头开始写。

35530

算法基础学习笔记——⑭欧拉函数快速幂扩展欧几里得算法中国剩余定理

✨欧拉函数 在C语言中,可以使用算法来计算欧拉函数(Euler's Totient Function)。欧拉函数,也被称为φ函数,用于计算小于或等于给定数字n的正整数中与n互质的数的个数。...Totient Function of %d is %d\n", n, result); return 0; } 在上述代码中,gcd函数用于计算两个数的最大公约数。...int euler[N]; // 存储每个数的欧拉函数 bool st[N]; // st[x]存储x是否被筛掉 void get_eulers(int n) { euler[1] = 1;...printf("Coefficients (x, y): (%d, %d)\n", x, y); return 0; } 在上述代码中,extendedEuclidean函数使用递归的方式来实现扩展欧几里得算法...extendedEuclidean和modInverse函数的实现与之前提到的扩展欧几里得算法的示例代码中的函数相同。

49410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    实现JavaScript语言解释器(一)

    因此为了更好地理解JavaScript的语言特性,我就自己动手实现了一个叫做Simple的JavaScript语言解释器,这个解释器十分简单,它基于TypeScript实现了JavaScript语法的子集...项目介绍 编译器 vs 解释器 在开始了解Simple的实现原理之前,我们先来搞清楚两个基本的编译原理概念:编译器(Compiler) vs 解释器(Interpreter)。...Simple的架构设计 我们编写的代码其实就是保存在计算机硬盘上面的字符串文本,而实现语言解释器的本质其实就是教会计算机如何才能理解并执行这些文本代码。那么计算机如何才能理解我们写的东西呢?...综上所述,一个语言解释器的软件架构大体是这样的: 上面其实也就是Simple的软件架构,接着让我们来看一下词法分析的具体实现。...反之,如果状态机发现没有新的字符可以输入而自己又处于一个非终止的状态,它就会抛一个叫做Unexpected EOF的错误 以上就是使用有限状态机来实现词法分析器的一个简单例子,Simple解释器的词法分析实现和上面的步骤是一样的

    1.6K30

    实现JavaScript语言解释器(二)

    从上面的描述可以看出,词法解析阶段的重点是分离单词,而语法解析阶段最重要的是根据既定的语法规则来组合单词。那么对于Simple解释器来说,它的语法规则又是什么呢?...细心的你可能发现在上面的例子中所有语句都是以分号;结尾的,这是因为为了简化语法解析的流程,Simple解释器强制要求每个表达式都要以分号结尾,这样我们才可以将重点放在掌握语言的实现原理而不是拘泥于JavaScript...因为外部DSL是完全独立的语言,所以它具有下面这些特点: 不能享用现有语言的编译和调试等工具,如有需要要自己实现,成本很高 如果你是语言的实现者,需要自己设计和实现一门全新的语言,对自己的要求很高。...没错就是函数的链式调用。 对于程序员来说最清晰的解释应该是直接看代码了,所以我们可以来看一下Simple语言语法解析的代码部分。...在下一篇文章中我将会为大家介绍Simple语言的运行时是如何实现的,会包括闭包如何实现以及this绑定等内容,大家敬请期待!

    84110

    实现一个Brainfuck解释器

    最近用 Python 实现了一个BrainFuck 解释器,简单介绍一下过程。...-- more --> 实现 BrainFuck 解释器 我们使用测试驱动设计的方法来实现 Brainfuck 解释器,首先需要约定一下 Brainfuck 解释器的接口: 约定接口 def execute...其实完全可以参考常见的编程语言的解释器的实现,将源代码解析成中间代码,然后再解释执行中间代码,这样就可以将解析与执行分离开来,使得解析过程变得简单,而且也可以将解析过程与执行过程分别进行优化,比如 Python...具体的实现可以看源代码仓库。 可能的改进 这个 Brainfuck 解释器的实现已经比较完善了,不过受限于 Python,整体的执行效率不会特别高。...总结 这个 Brainfuck 语言的解释器总体上比较简单,但还是反映了使用虚拟机的方式来实现解释器的主要流程。

    86060

    理解随机森林:基于Python的实现和解释

    数据科学家 William Koehrsen 用 Python 实现并解释了决策树和随机森林的工作过程。...这使得我们可以在模型表现不如预期时对模型进行诊断,或解释我们的模型做决策的方式——这能帮助我们说服他人使用我们的模型。 本文将介绍如何使用 Python 构建和使用随机森林。...我们不只是简单地展示代码,而会尽力解释模型的工作方式。我们将从一个解决简单问题的单个决策树开始,然后逐渐深入,最终完成一个针对某个真实世界数据科学问题的随机森林。...这是一种可解释的模型,因为其决策方式类似于我们在现实生活中做法:我们询问一系列有关数据的问题,直到我们最终达成决策。 决策树的主要技术细节在于如何构建有关数据的问题。...引言中提到的 Jupyter Notebook 提供了一个用于随机森林的模型优化的随机搜索的实现。

    1.4K20

    Linux命令行解释器的模拟实现

    后面我们具体实现的时候会有所体现,之后我们道来。 然后下面就是一步步对这些拆开的函数进行实现了。...三·命令行提示行的打印: 我们让它格式输出这样的格式: #define FT "my simulate shell:%s@%s %s# "//snprintf的format最大值 首先我们对比一下真正的命令解释器...(因为导入environ维护的二维数组应该是地址;故给它整成全局): //这里获得环境变量和其他上面不同;因为当我们通过chdir改变当前目录的时候它在环境变量中的记录(真正的bash实现了)而我们没有实现...下面我们就不对应把cd 的相关都实现一遍;大概实现常用的这几个: 注意:这里我们为了可以实现cd -:也就是会定义好变量保存上一次访问的目录;方便回去;故当每次chdir都会保存一下;并改变env表中的..."" : home; } //这里获得环境变量和其他上面不同;因为当我们通过chdir改变当前目录的时候它在环境变量中的记录(真正的bash实现了)而我们没有实现,因此我们 //可以通过getcwd每次调完新的目录开始就使用它不仅能改变了

    34500

    实现一个 BrainFuck 解释器

    最近用 Python 实现了一个BrainFuck 解释器,简单介绍一下过程。...实现 BrainFuck 解释器 我们使用测试驱动设计的方法来实现 Brainfuck 解释器,首先需要约定一下 Brainfuck 解释器的接口: 约定接口 def execute(code: str...其实完全可以参考常见的编程语言的解释器的实现,将源代码解析成中间代码,然后再解释执行中间代码,这样就可以将解析与执行分离开来,使得解析过程变得简单,而且也可以将解析过程与执行过程分别进行优化,比如 Python...具体的实现可以看源代码仓库。 可能的改进 这个 Brainfuck 解释器的实现已经比较完善了,不过受限于 Python,整体的执行效率不会特别高。...总结 这个 Brainfuck 语言的解释器总体上比较简单,但还是反映了使用虚拟机的方式来实现解释器的主要流程。

    1K10

    Residual, BottleNeck, Inverted Residual, MBConv的解释和Pytorch实现

    上篇ConvNext的文章有小伙伴问BottleNeck,Inverted Residual的区别,所以找了这篇文章,详细的解释一些用到的卷积块,当作趁热打铁吧 在介绍上面的这些概念之间,我们先创建一个通用的...下图可视化了该块,我们在原始实现中使用 r=4 前两个convs之后是batchnorm和一个非线性激活,在加法之后还有一个非线性的激活 from torch import nn class BottleNeck...根据经验表明,当输入的通道小于输出的通道时删除最后的激活函数是正确的。所以只要删除 BottleNeck 中的 nn.ReLU 即可。...Squeeze 和 Excitation的这个块的修改的版本。..., 这些卷积块的架构是我们在CV中经常会遇到的,所以强烈建议阅读与他们相关的论文。

    1.5K21

    Redis的String类型内部实现 以及 关于SDS的解释

    String 类型的底层的数据结构实现主要是 int 和 SDS(简单动态字符串),SDS 和我们认识的 C 字符串不太一样,下面第三节会有解释。 二....,忘记给s1分配足够的内存空间, s1的数据就会溢出到s2的空间, 导致s2的内容被修改.。...而Redis提供的SDS其内置的空间分配策略则可以完全杜绝这种事情的发生。...预分配 我们知道在数组进行扩容的时候,往往会申请一个更大的数组,然后把数组复制过去。为了提升性能,我们在分配空间的时候并不是分配一个刚刚好的空间,而是分配一个更大的空间。...但这种策略同样会造成一定的内存浪费,因此Redis SDS API提供相应的API让我们在有需要的时候真正的释放SDS的未使用空间。

    93010

    Fast-SCNN的解释以及使用Tensorflow 2.0的实现

    ---- 作者:Kshitiz Rimal 编译:ronghuaiyang 导读 对图像分割方法Fast-SCNN的解释以及实现的代码分析。...本文中使用的代码并不是作者的正式实现,而是我对论文中描述的模型的重构的尝试。 随着自动驾驶汽车的兴起,迫切需要一种能够实时处理输入的模型。...这里,所有3个层都使用2的stride和3x3的内核大小。 现在,让我们首先实现这个模块。首先,我们安装Tensorflow 2.0。我们可以简单地使用谷歌Colab并开始我们的实现。...使用这个代码块使得卷积的实现在整个实现过程中易于理解和重用。...因此,在实现过程中,我也按照论文的要求引入了这两层。 在根据最终输出的需要进行上采样之后,SoftMax将作为最后一层的激活。

    67110

    Fast-SCNN的解释以及使用Tensorflow 2.0的实现

    作者:Kshitiz Rimal 编译:ronghuaiyang 导读 对图像分割方法Fast-SCNN的解释以及实现的代码分析。 ?...本文中使用的代码并不是作者的正式实现,而是我对论文中描述的模型的重构的尝试。 随着自动驾驶汽车的兴起,迫切需要一种能够实时处理输入的模型。...这里,所有3个层都使用2的stride和3x3的内核大小。 现在,让我们首先实现这个模块。首先,我们安装Tensorflow 2.0。我们可以简单地使用谷歌Colab并开始我们的实现。...使用这个代码块使得卷积的实现在整个实现过程中易于理解和重用。...因此,在实现过程中,我也按照论文的要求引入了这两层。 在根据最终输出的需要进行上采样之后,SoftMax将作为最后一层的激活。

    1.2K30

    手把手解释实现频谱图卷积

    如果相邻的值没有突然的变化,那扩散就是很平滑的,如下面的动图所示。 图3:基于拉普拉斯图的规则,网格图中某些信号的扩散。...我将A 2规范化,使得每行之和等于1,从而得到了一个关于2-hop连接的概率解释。注意,拉普拉斯算子及其功率是对称矩阵,这使得特征分解更容易,并且便于在深度图网络中进行特征传播。...令人惊讶的是,该网络在MNIST上达到了96.7%。 这可以通过数据集的简单性来解释。 重申一下,我们通常希望滤波器更小、更局部化(这与我下面要指出的情况不完全相同)。...为了实现这一点,他们提出在频谱域中滑动滤波器,从而使它们在空间域上更符合频谱理论。我们的想法是,你可以将公式(3)中的滤波器W频谱表示为?...-2-be6d71d70f49)中,我解释了由Defferrard等人在2016年提出的Chebyshev频谱图卷积,它直到现在还是一个非常强大的基线,它有一些很好的特性,而且很容易实现,正如我用PyTorch

    1.7K20

    请你解释一下hashMap具体如何实现的?

    Hashmap基于数组实现的,通过对key的hashcode & 数组的长度得到在数组中位置,如当前数组有元素,则数组当前元素next指向要插入的元素,这样来解决hash冲突的,形成了拉链式的结构。...需要注意的是,HashMap在JDK1.8的版本中引入了红黑树结构做优化,当链表元素个数大于等于8时,链表转换成树结构;若桶中链表元素个数小于等于6时,树结构还原成链表。...因为红黑树的平均查找长度是log(n),长度为8的时候,平均查找长度为3,如果继续使用链表,平均查找长度为8/2=4,这才有转换为树的必要。...链表长度如果是小于等于6,6/2=3,虽然速度也很快的,但是转化为树结构和生成树的时间并不会太短。还有选择6和8,中间有个差值7可以有效防止链表和树频繁转换。...假设一下,如果设计成链表个数超过8则链表转换成树结构,链表个数小于8则树结构转换成链表,如果一个HashMap不停的插入、删除元素,链表个数在8左右徘徊,就会频繁的发生树转链表、链表转树,效率会很低。

    65420

    从编译原理看一个解释器的实现

    『设计模式』中有一个模式可以解释特定的语法规则,它就是解释器模式(Interpreter Pattern)。...不同于常见的策略模式或者是工厂模式,解释器模式在.NET或者JDK中并不常见,而且在业务上也很少会去解释特定的语法,所以它并不被广泛使用。...一个解释器可大可小,大可以是复杂的编译器,小也可以是一个简单的字符串解析,但本质上它们都是对特定的语法做出合理的解释。 解释器在游戏领域的应用 虽然解释器模式很少使用,但在在游戏开发中,还是很常见的。...开始实现解释器 有了准备之后,接下来就是实现解释器,它可以解释游戏中的『公式』。 1.)...小结 本文为大家介绍了怎样从编译原理的角度来实现一个解释器。在游戏领域,需要解释器来解释自定义的『公式』。这个『公式』的语法往往是和上下文无关的,又被称为BNF范式。

    2.4K100

    10个常用的损失函数解释以及Python代码实现

    将所有损失函数(loss function)的值取平均值的函数称为代价函数(cost function),更简单的理解就是损失函数是针对单个样本的,而代价函数是针对所有样本的。...也就是说损失函数是知道模型如何训练的,而度量指标是说明模型的表现的。 为什么要用损失函数?...由于损失函数测量的是预测值和实际值之间的差距,因此在训练模型时可以使用它们来指导模型的改进(通常的梯度下降法)。...在构建模型的过程中,如果特征的权重发生了变化得到了更好或更差的预测,就需要利用损失函数来判断模型中特征的权重是否需要改变,以及改变的方向。...我们可以在机器学习中使用各种各样的损失函数,这取决于我们试图解决的问题的类型、数据质量和分布以及我们使用的算法,下图为我们整理的10个常见的损失函数: 回归问题 1、均方误差(MSE) 均方误差是指所有预测值和真实值之间的平方差

    1.4K20

    10个常用的损失函数解释以及Python代码实现

    将所有损失函数(loss function)的值取平均值的函数称为代价函数(cost function),更简单的理解就是损失函数是针对单个样本的,而代价函数是针对所有样本的。...也就是说损失函数是知道模型如何训练的,而度量指标是说明模型的表现的 为什么要用损失函数?...由于损失函数测量的是预测值和实际值之间的差距,因此在训练模型时可以使用它们来指导模型的改进(通常的梯度下降法)。...在构建模型的过程中,如果特征的权重发生了变化得到了更好或更差的预测,就需要利用损失函数来判断模型中特征的权重是否需要改变,以及改变的方向。...我们可以在机器学习中使用各种各样的损失函数,这取决于我们试图解决的问题的类型、数据质量和分布以及我们使用的算法,下图为我们整理的10个常见的损失函数: 回归问题 1、均方误差(MSE) 均方误差是指所有预测值和真实值之间的平方差

    1.1K21

    简单易懂的Dinic算法C++实现 含算法解释

    目录 程序思想 提示 C++代码 程序实现截图  ---- 学习了Dinic算法,尝试通过算法思想使用C++实现了一下。...1)初始化程序,设置容量网络和网络流 2)DFS()构造残留网络、BFS()构造层次网络,层次网络中找不到汇点便结束算法 3)在层次网络中不断进行增广,知道层次网络中没有增广路;每次增广都要去掉已饱和的弧...4)转到步骤2) 提示 程序中Dinic()循坏调用BFS()不断构建层次网络,每次构建好调用则循环DFS()增广,因此步骤2,3的一次循环便是一个阶段,每个阶段中都是根据残留网络建立层次网络然后进行增广...在程序实现的时候,并不需要真正“构造”层次网络,只需要对每个顶点标记层次,增广的时候,判断边是否满足layer(v) = layer(u)+1这一约束条件即可。...} int max_c = Dinic(); printf("\n汇点最大流量为:%d", max_c); } return 0; } 程序实现截图

    73920
    领券