计算复杂度理论 随机算法与随机计算 GPT的一点思考

今日起在论坛和大家共同学习和讨论一些计算复杂性相关的问题, 并和大家一起了解随机算法和随机计算这一今日广泛应用的算法。

计算理论要回答三个问题。第一个问题是:什么是计算?什么问题可以借助机器求解?著名的丢番图方程要求找出整系数多项式方程 a_1x_1^{n_1}+a_2x_2^{n_2}+...+a_kx_k^{n_k}=0 的整数解。希尔伯特第十问题是:是否存在一个计算过程,判定任给的一个丢番图方程是否有整数解?数学家对什么是计算这个问题颇感兴趣。从机械化的角度看,证明过程是一个寻找满足一定数学和逻辑性质的符号串,在理解这个证明时,要进行一个形式化验证过程。数学家的兴趣是证明过程在多大程度上可以机械化。二十世纪上半叶在数学基础和计算基础领域的研究最终达成了共识:计算是一个独立于任何模型的概念,所有计算模型定义的计算都是等价的。建立在这一共识基础上的可计算理论回答了第一个问题。

希尔伯特第十问题最终被年青的苏联数学家马蒂雅谢维奇于 1970 年解决,他证明了该问题的答案是否定的。若一个问题可以借助于机器求解,我们总会设法让机器代替人类解决该问题,因为与人类相比,机器的优势不言而喻。

所以第二个问题是:如何让机器求解一个可计算问题?一台专用设备可以解决某一类特定问题,一台冯·诺依曼体系架构的计算机可以通过预置一段程序来解决指定问题。无论是用专用计算设备还是通用计算设备解题,核心都是算法。算法理论研究的,正是如何让机器解决问题。尽管人类对算法的兴趣历史悠久;但作为一门理论,系统性的研究和理论突破发生在计算机出现之后。

一个著名的例子是素数分解。这是数论中一个古老问题,直到 2004 年人们才发现这个问题有高效算法 。

另一个著名的问题是图同构问题。种种迹象表明,这不是个难问题,但一直没有找到它的高效算法。巴柏在 2016 年发表了图同构问题的一个准多项式时间算法,被发现了一个错误后,巴柏在几天之后公布了一个更新。

这些例子,把我们带到了第三个问题:给定一个计算问题,解决该问题需要多少资源?这些资源包括时间、空间,但最根本的资源限制是能量。围棋机器人可以完败人类选手,但在下棋过程中,前者所消耗的总能量远大于后者。信息技术的发展迫使我们思考如何制定更公平(因而也更环保)的游戏规则。以围棋为例,游戏规则应要求博弈双方在博弈过程中的能耗差限制在一个合理的范围。能耗限制是实实在在的。

实际应用中,我们关心一个问题是否有可行算法,即它是否有一个多项式时间算法。如果一个可计算问题没有可行解,它就是一个理论上可计算但实际中不可计算的问题,我们得想其他办法。再看一个著名的问题:给定一个图,该图的一个结点覆盖是一个结点子集,图中的任何一条边都与该结点子集中的某结点关联。最小结点覆盖问题要求计算出一个图的极小的结点覆盖集。

实际中,这就是探头安装问题,我们希望用最少的探头,监控到一个楼面的所有走廊。遗憾的是,探头安装问题没有可行解。计算复杂性理论研究如何根据解决问题所消耗的资源量对问题进行分类。它试图刻画一个问题的绝对复杂性,即界定解决该问题所需的最小资源,尽管在这方面计算复杂性理论不太成功。它还希望比较不同问题对资源的相对消耗量,在这方面计算复杂性理论非常成功。计算复杂性理论的核心关注就是可行计算,为了可行性,可以在一定范围内牺牲正确性、精度、 完全自动化,甚至可以同时牺牲三者。

从能量的角度考虑像GPT这样的模型,就会发现和人类有着惊人的差距,GPT在很多方面的能力是以人类作为衡量标准的,而人类实现了很多方面比GPT这种模型更强的计算和推理能力,但消耗了小的多得多能量。每天通过吃饭摄入的能量竟能支持如此复杂的系统(包括大脑,用于感知和推理,以及身体,用于移动)运转,不能不说是一个奇迹。

6 Likes

佬友优化下排版,眼睛疼了

ok 这就优化


总是403 保存不了编辑啊

@neo 看看什么情况呗 好像是个bug呢 我编辑自己的帖子总是403

不分段还是有点阅读压力

打扰了 :pensive:

应该是有html标签被cf的waf拦截了

1 Like

去掉latex公式就好了 重新写就可以了

我靠上学期的记忆开始攻击我
什么 recursive enumerable, recursive, non-recursive 绕来绕去 :melting_face:

哈哈 我主要聊聊随机算法的部分 而且尽量不用术语

梦回大学

人类24小时消耗的能量换算成电能差不多2.5度电,讲真也不少了,但是相对于现在的大模型来说,确实能效比差的远,但主要是硬件的能源利用率的问题,如果未来硬件的电力和算力的转化比非常高,大模型算法也非常完善,赶上人的智力还是有希望的

人类24小时消耗的能量换算成电能差不多2.5度电

这个角度很有意思啊,原来人的功率≈100W,就可以做这么事情,属于超级高效能啦

单算大脑的话 那就是超级超级高效能 毕竟很多能量用在身体移动上了 脑部大概只用了1/4

1 Like

刨掉人体运动的能量 差距会更大 毕竟大模型并不用动 :rofl:

浅更一下
基本的快速排序算法(随机版本)的复杂度分析


这里定义的快速排序随机算法的复杂性就是其期望比较次数。
快速排序算法的第一个性质是:两个元素最多比较一次,比较时其中的一个元素必为核心元素。基于此观测,可以引入指示变量 Y_{i,j} ,若 y_iy_j 比较过, Y_{i,j}=1,否则 Y_{i,j}=0
第二个性质是:若 y_iy_j 进行了比较,那么在比较前, 集合 \{y_i,y_{i+1},\cdots,y_{j-1},y_j\} 中的任何两个元素之间没有进行过比较(否则 y_iy_j 不会出现在同一个递归调用的输入里)。假设 \{y_i,y_{i+1},\cdots,y_{j-1},y_j\} 是某次递归调用的输入。选 \{y_i,y_{i+1},\cdots,y_{j-1},y_j\} 中任何一个元素作为核心元素, 比较次数都是 j-i 。最坏情况发生在选了 y_iy_j ,其发生概率为 \frac2{j-i+1}

因此期望比较次数不会超过
E\left[\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}Y_{i,j}\right]=\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}E\left[Y_{i,j}\right]\leqslant\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\frac{2}{j-i+1}=2\left(n+1\right)\sum_{k=1}^{n}\frac{1}{k}-4n
调和级数 \sum_{k=1}^n\frac1k 等于 \ln(n)+\Theta(1) 。因此快速排序的总的比较次数的期望值不超过 2nln\left(n\right)+\Theta\left(n\right)
这就是从随机的角度分析快排的时间复杂度的方法

埋坑:蒙特卡罗方法

常规话题算法

From #dev:algorithm to 开发调优

1 Like