• 之前翻硬币问题胡思乱想的完善


    题目背景
    小明正在玩一个“翻硬币”的游戏。

    题目描述
    桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo,如果同时翻转左边的两个硬币,则变为 oooo***oooo。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

    输入格式
    两行等长字符串,分别表示初始状态和要达到的目标状态,每行长度小于 10001000。

    数据保证一定存在至少一种方案可以从初始状态和要达到的目标状态。

    输出格式
    一个整数,表示最小操作步数。

    输入输出样例
    输入 

    **********
    o****o****
    输出 

    5
    输入 

    *o**o***o***
    *o***o**o***
    输出 

    1

    在做这道题目的时候我这样评价这个解法答案的唯一性是因为——

    另外,应当明确的一个事实就是我们写算法就是为了让计算机的for循环结构和while结构帮我们自动处理同一的大量的执行。还有一点就是它们必须都是满足某种规律的,然而有的题目就比如翻硬币是没有规律的(我指的是明显的使得程序直接按照最朴素的想法直接进行的),这时for和while(虽然不一定但依然是在for和while的基础上进行转化的)肯定还是要用到的。所以我们只能按部就班的直接翻硬币。这时往往是要从另外一个角度来看待这一个问题的。我们可以毫不怀疑的说就是这个直接从开头开始翻转了。因为像数学一样转化这个问题就说明它是有规律的,但是请注意到那些看可以被重写(重述)的问题是在基本的问题上进行改进的(因为这就和数学里面的“范畴论”一样,不同的问题之间之所以可以一步一步的转化就是因为它转化后的,如代数转几何是因为几何就是代数建立的基础)而算法的简化问题就是在之前的问题的认识之下(不是穷举)一一对应的结果(即使人们并未意识到),所以我们可以丝毫不怀疑的说就是要这样解决的。

      但是用已有的去重构那些复杂的是很累的,所以数学中才会用那些高级的理论来解决成了那些基础数学很难解决的问题(高级理论放大了基础的一些特性,更高又在更高级的上面构造,(高级又有“自己的”特点,又可以深挖))。对应到同样是逻辑为基础的计算机里就是——高级算法和数据结构了。这样子我们就看清楚了哪些问题是值得我们去用算法和数据结构的。

    然而其实可以解释得更加清楚的。

    启发我的是我对格皇的不可模仿性的思考。可以说尽管我已经意识到了这一点,但是我还是不能完全说服自己。在清明假期回家的路上我反思了自己的所学和所见,了一些结果。

    我在B站上面看到一个UP主,他教授的是他自己在高中数学竞赛学习过程中悟出来的“自由度”分析。我当时就觉得和格皇在《收获与播种》里面说因为知道三条边可以确定一个三角形所以就去找到了边表示面积的方法。UP主是北大数院的,他的实力在我之上但是他依然不可能做到像格洛滕迪克那样,自己发现勒贝格积分和测度论。他反而是利用高级的知识来揭示高中知识的本质(尽管自由度的刻画几乎只对线性方程有解决问题的时候看清楚道路的作用),这给了我很大的启发,这次想起我觉得虽然不能到达格的水平亦可以用苏苏的方法来学习新思想,达成自己的小目的。

    在知乎上面看数学有关的帖子的时候突然刷到了希尔伯特纲领中对符号证明的推崇——也就想起来了自己学习数学的经历(对偏导数导数和向量函数导数的一些玩乐)。

    从导数的数学定义进而推导出的导数运算法则。运用拉格朗日中值定理得到偏导数公式。一个思想贯彻其中。这使得我去猜测这样一个在希尔伯特纲领里称为形式化的东西。

    1.导函数只能是两个元素之间的,也就是只能是自由度为1的时候微积分才存在

    2.偏导数相当于是,一个变量先动,然后另外一个变量后动。转化成数学语言就是把时间的先后给拍扁成为隐藏的操作 f(x + delt x, y + delt y)- f(x,y) = f(x + delt x, y + delt y)- f(x,y + delt y) + f(x ,y + delt y) - f(x,y)(x变化和y变化)

    3.无论给出任何数总是存在更小的数字使得函数接近极限

    而希尔伯特纲领是这样子的

    希尔伯特纲领的核心目标通常可以总结为以下三个关键点:

    1. 形式化:希尔伯特希望将整个数学体系的形式化,即将所有的数学概念和推理过程转化为精确的符号逻辑表达,并基于一套有限的、明确的公理和严密的推理规则构建数学体系。这意味着所有的数学理论都应该能在一种形式语言中得到表达。

    2. 一致性和完备性:希尔伯特计划证明数学公理系统的相容性,即确保在该系统内不可能推导出逻辑矛盾;同时他还追求完备性,即系统内每一个真实的陈述都应该能够在该系统内部通过逻辑推理得到证明。换言之,他希望建立一个既能涵盖所有真命题,又能排除一切内在矛盾的数学体系。

    3. 决定性:希尔伯特试图找到一种通用的方法或算法,对于任何给定的数学命题,都能确切地决定它在所考虑的公理系统中是否可证明。这意味着数学真理的可判定性问题,即是否存在一种机械程序,对于任何数学陈述,都能准确判断其是否为真或者能否被证明。

    虽然说这个纲领最后被证明是错误的。但是需要注意到的一点是,这是专业数学家得到的结果。

    这说明了

    你学到的数学是完全符合希尔伯特纲领的

    假设你学到的数学是不符合希尔伯特纲领的,换句话说就是会找到不能用公理体系证明的定理的话那就说明这个纲领一开始就是荒谬的,大数学家没你牛。但是这是不可能的。

    事实也确实如此

    1.除了哥德尔找到的sub(n,n,17)的这个自相矛盾的命题之外数学家也就只找到了其余的几个。如果你在你学到的那些不高级的数学中找到了这样的定理,那你就会留名数学史。但是这是几乎不可能的。所以,希尔伯特纲领在低级的数学领域是符合的。我们大可放心使用。

    2.就算是高级的数学也可把希尔伯特纲领当作假定为真,因为反列少得可怜。找到可以留名史册。没找到可以推进自己的工作,两不输。

    所以以上三个性质请大胆地去用。

    由此可知我们遇到的数学领域都是可以相互转化的,就是一一对应的。各个数学领域一一对应。几何代数本质上相同。我们也没必要在这上面浪费时间了,除了偶尔转化来玩一下,熟悉一下数学,混个脸熟。

    范畴论太复杂了,而且涉及到了高级的知识,我的理解可能不对了。用到希尔伯特纲领就足够解释了。

    其实我原来是想要解决算法问题的——判断那些题目是穷举,那些是有存在成立的数学原理的。但是计算机里面有的问题就是纯体力活。比如计算机找素数,这就是纯体力活。应为数学家都没找到一个素数公式去表达所有的素数或者说部分无限多个素数。(欧拉、高斯、黎曼都未曾找到)当然现在也没有。也许有的知识是有规律的,但是我的数学技术还是不够深,所以暂时还是不能知道其中的奥秘(或许穷不穷举都是数学问题?毕竟几乎计算机上有成就的计算机专家都是数学家或者擅长数学的,图灵、冯诺依曼、)我留下这篇文章。希望会对以后有所帮助。

    只是暂时归纳到

    看似穷举但是没有穷举思路的也许是数学问题

    其实有的问题还真的就是没有办法可以判定是否有快速解(有什么意义什么的)。我在B站上面看到的UP主运用的“自由度”分析得到的每一步对答案远近的原因的包括了,初等数学是简单的,答案一定存在且一定在所学过的范围之内,并且只对线性方程有用(包括了cos(x)、sin(x)等奇奇怪怪的也算是1元,比较特殊)。

    比如说

    高斯求和

    1 + 2 + 3 + 4 + ... +n = (1 + n ) * n  / 2

    暴力算法就是直接上的直接

    int i = 1;

    int sum = 0;

    while(i <= n){

    sum = sum + i

    i ++;

    }

    能想得出好一点算法的都是有数学洞察力的,并没有什么理论能指向这个结果。计算机科学家们也没有去提出这样的理论——P NP里面蓝桥杯等竞赛肯定是P问题,但问题是多项式时间内的穷举法也是P解法。

    另外一个例子就是连计算机大神约翰卡马克都震惊的依据牛顿的流数法而设计的算法。它还设计了计算机存储浮点数的方法。所以还是老老实实下苦功发去积累吧。

    补充


    格罗滕迪克那种知道由三条边确定一个三角形的几何性质,然后猜测知道一定有一个三角形面积公式只含有三角形的三条边。这种关系不是必然的,甚至可以说是他的灵感,数学感觉非凡。这种联系的感觉不一定对的,但是从错误出发也可以达到正确的答案,更不用说数学中许许多多的领域本来就是相互关联的。别乱模仿,他学习天赋不高,但是这方面的天赋和感觉确实第一梯队的

    好消息是其实不用研究得这么深。因为书上出现的都不会太麻烦,不会是什么数学黑洞。老老实实去学数学吧,谨慎地拓展。

    而且严格化后的微积分是自洽的(实数分析)。国内叫做“高等数学”的数学是不自洽的。  。。。

    哥德尔说的是包含强算数的较强的公理体系。而欧几里得几何公理和上面提到的实数分析等一些数学公理等不是,它们在一定范围内接近于实现,“决定性”则受到限制(非欧几何)。

  • 相关阅读:
    基于java的考研自习室音视频通话APP设计
    亚商投资顾问 早餐FM/1028华为海外推广5.5G
    学内核之九:学会偷懒,善用内核的调试日志
    编译原理基本概念
    赶紧收藏!中秋节营销必备文案和海报,拿了就能用!
    python工具方法 45 基于ffmpeg以面向对象多线程的方式实现实时推流
    使用 Flutter 创建自适应应用
    RustDay03——记录刷完Rust100题
    深入理解目标检测模型与卷积网络的感受野
    树与图的广度优先遍历:acwing 847. 图中点的层次
  • 原文地址:https://blog.csdn.net/2301_80124936/article/details/137385247