绪论

背景

计算题是一种常见的作业题型。对于广大学生而讲,计算题的过程繁琐,且占比较大。为了提高作业效率,提出一种计算题自动解题机器具有一定的必要性。在该领域,存在“符号运算”的技术来解决这个问题。常见的商用软件有Mathematica和Maple,另工程领域的Matlab也有符号运算的功能。但由于其商用性,这些解决方案内部高度封装,不利于对计算题开展研究以及实现自动解题机器的高度自定制。因此,本文将提出一种实现简易自动解题机器的构思,对于小学算数应用题、中学物理计算题、大学工科计算题等领域具有广阔的应用前景。

本文的意义和内容

本文将就以下几个方面展开讨论和研究:

  1. 自动解题机器的分解及程序复杂程度的控制
  2. 自动解题机器的步骤生成部分
  3. 自动解题机器的求值推导部分
  4. 结论

自动解题机器的分解

自动解题机器是一种相对复杂的程序。为了增加其实现的可行性,需要对自动解题机器进行功能上的分解。

本文所述一种自动解题机器,是指

  • 以某种形式或结构表达一个或若干个等式,从而描述计算问题
  • 给定问题中的某些变量已知
  • 程序自动推导出给定等式的运用步骤
  • 程序须依次求出各未知量,直到所有变量的值均已知

为此,可以将自动解题机器分解为两个部分:

  1. 等式推导步骤生成:需要生成解题步骤
  2. 未知量的求值:需要按照上述解题步骤和等式依次推导出未知变量的值

自动解题机器的步骤生成部分

本文对于以下讨论的计算题做出以下基本假设:

  1. 四则运算假设:假设所有计算题仅涉及四则计算
  2. 单一性假设:假设所有公式中每个变量最多仅出现一次
  3. 最小共用假设:假设一个变量最多被两个公式共用

四则运算假设将讨论的计算题复杂程度限制在一个合理的范围内;单一性假设则确保了公式可以方便地转换为变量的显式表达式;最小共用假设则确保了一个变量不会具有多种彼此冲突的表达形式。

仅含有1个等式的知n求1

首先考虑最简单的计算题情形:简单的知n求1问题。以下列应用题为例:

例1:小明、小丽、小强共有14颗糖,其中小丽有4颗糖,小强有5颗糖,但是小明忘记了自己有几颗糖,你能告诉他吗?

解:
设小明、小丽、小强分别有a、b、c颗糖
有a+b+c=14
a=14-b-c=5
故小明有5颗糖

如例题所示,对于具有(n+1)个变量、1个等式的简单问题,给定任意n个已知量,可以求出剩下的一个未知量。

含有多个等式的问题及其图的表达

孤立计算题与非连通图

例2:小明、小丽、小强共有14颗糖,其中小丽有4颗糖,小强有5颗糖;小明、小娟、小花共有28块饼干,其中小娟有13块饼干,小花有14块饼干;但是小明忘记了自己有几块饼干,你能告诉他吗?

解:
设小明、小丽、小强分别有a、b、c颗糖
设小明、小娟、小花分别有x、y、z块饼干

\[\left\{\begin{array}{c} a+b+c=14 \\ x+y+z=28 \end{array} \right.\]

以下过程略,小明有5颗糖、1块饼干

由上述解题过程可知,该应用题存在两个互不相干的部分,体现在该问题包含两个等式,且两个等式不共享任何变量。任意一个等式的求解都不会影响到另一个等式的求解。

以集合的形式表达一个等式及其所包含的变量,上述问题可表达为:

eq1 = ["a", "b", "c"];
eq2 = ["x", "y", "z"];

以图的形式表达上述问题
图片
其中,两个等式之间并没有共享任何变量,所以没有任何连接,组成一个非连通图。

无需化简计算题与无环连通图

例3:小明、小丽、小强共有14颗糖,其中小丽有4颗糖,小强有5颗糖;小明、小娟、小花共有28块饼干,其中小娟有13块饼干;但是小明忘记了自己有几块饼干,只记得自己的糖颗数和饼干块数相同,你能告诉他吗?

解:
设小明、小丽、小强分别有a、b、c颗糖
设小明、小娟、小花分别有a、y、z块饼干

\[\left\{ \begin{array}{c} a+b+c=14\\ a+y+z=28 \end{array} \right.\]

以下过程略,小明有5颗糖、5块饼干;小花有10块饼干(谁问你了?)

由以上解题过程知,两个方程之间共享变量,因此在求解过程中有两者之间存在影响

以集合的形式表达一个等式及其所包含的变量,上述问题可表达为:

eq1 = ["a", "b", "c"];
eq2 = ["a", "y", "z"];

以图的形式表达上述问题

其中,两个等式之间并共享一个变量,存在简单连接,组成一个连通图。

可以根据在方程集合中检索已知变量,计数变量个数,来确定依次求解顺序

  1. eq1中检索,发现已知bc两个变量,记eq1被求解,记a已知
  2. eq2中检索,发现已知ay两个变量,记eq2被求解,记z已知

为了保证计算题可解,需要一定数量的已知量。

假设第\(i\)个公式所包含变量个数为\(n_i\),公式结点之间边界个数为\(m\),则变量总个数实际为\(\sum n_i-m\)。考虑将所有方程消元化简,变量个数减少,可以等效为具有变量个数为\(\sum n_i -2m\)的单一方程,因此需要已知量数量为\(N=\sum n_i -2m -1\)

须化简计算题与有环图

例4:小明、小丽、小强共有14颗糖,其中小强有5颗糖;小明、小丽、小花共有28块饼干,其中小花有14块饼干;但是小明和小丽忘记了自己有几颗糖、几块饼干,只记得各自饼干和糖的数量相同,你能告诉他们吗?

解:
小明、小丽、小强糖颗数:a、b、c
小明、小丽、小花饼干块数:a、b、z
以下过程略,结果略

以集合的形式表达一个等式及其所包含的变量,上述问题可表达为:

eq1 = ["a", "b", "c"];
eq2 = ["a", "b", "z"];

以图的形式表达上述问题
图片
其中,两个等式之间共享两个变量,存在复杂连接,组成一个有环连通图。

此时,原有解决过程失效。

但是上述失效只是暂时的。由于两个等式之间存在共享变量,因此总能通过消元的方式减少变量个数。但对于消元化简的方法,本文不作讨论介绍。

自动解题机器的求值推导部分

例5:小飞有若干件衬衫,每件衬衫上分别有相同数量的若干个纽扣;他把这些纽扣全拆下来,缝到了若干个布偶人上作为眼睛,每个布偶人消耗两个纽扣,完工后还剩余5个。试以等式的形式表达。若已知小飞衬衫件数、布偶人只数,试写出每件衬衫上纽扣数的表达式。

解:
设小飞衬衫x件,每件有纽扣y颗,小飞拥有布偶人z只
表达为:\(x\times y = 2z+5\)
等价于:\(\displaystyle y=\frac{1}{x}(2z+5)\)

为了在程序中储存这种表达式,可以用树的形式表达等式两边的部分

考察目标未知变量所在子树方位,将另一棵子树移动到另一棵树上。

  • 每次将有别于未知变量所在的子树,移动到不包含未知量的树根部。
  • 对于无次序的运算符(+、*)等,总是在移动后更改为其逆运算,总是将被移动的子树置于右侧
  • 对于有次序的运算符(-、/)等
    • 若被移动子树原先处在左侧,则移动后仍处在左侧,且保留运算符
    • 若被移动子树原先处在右侧,则移动后运算符更改为其逆运算,任意置于左、右侧
  • 迭代上述步骤,直到未知变量单独作为一棵树

结论

本文提出了一种计算题自动做题机器的设计方案构思,并对基本的原理进行了设计和探讨。但未给出具体实现,且未对方程之间消元、化简进行探讨。未来将对上述问题进一步开展研究,有望解决学生做计算题耗时大的难题。

posted on 2023-09-01 13:31  suspended-monitor  阅读(45)  评论(0编辑  收藏  举报