绪论
背景
计算题是一种常见的作业题型。对于广大学生而讲,计算题的过程繁琐,且占比较大。为了提高作业效率,提出一种计算题自动解题机器具有一定的必要性。在该领域,存在“符号运算”的技术来解决这个问题。常见的商用软件有Mathematica和Maple,另工程领域的Matlab也有符号运算的功能。但由于其商用性,这些解决方案内部高度封装,不利于对计算题开展研究以及实现自动解题机器的高度自定制。因此,本文将提出一种实现简易自动解题机器的构思,对于小学算数应用题、中学物理计算题、大学工科计算题等领域具有广阔的应用前景。
本文的意义和内容
本文将就以下几个方面展开讨论和研究:
- 自动解题机器的分解及程序复杂程度的控制
- 自动解题机器的步骤生成部分
- 自动解题机器的求值推导部分
- 结论
自动解题机器的分解
自动解题机器是一种相对复杂的程序。为了增加其实现的可行性,需要对自动解题机器进行功能上的分解。
本文所述一种自动解题机器,是指
- 以某种形式或结构表达一个或若干个等式,从而描述计算问题
- 给定问题中的某些变量已知
- 程序自动推导出给定等式的运用步骤
- 程序须依次求出各未知量,直到所有变量的值均已知
为此,可以将自动解题机器分解为两个部分:
- 等式推导步骤生成:需要生成解题步骤
- 未知量的求值:需要按照上述解题步骤和等式依次推导出未知变量的值
自动解题机器的步骤生成部分
本文对于以下讨论的计算题做出以下基本假设:
- 四则运算假设:假设所有计算题仅涉及四则计算
- 单一性假设:假设所有公式中每个变量最多仅出现一次
- 最小共用假设:假设一个变量最多被两个公式共用
四则运算假设将讨论的计算题复杂程度限制在一个合理的范围内;单一性假设则确保了公式可以方便地转换为变量的显式表达式;最小共用假设则确保了一个变量不会具有多种彼此冲突的表达形式。
仅含有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"];
以图的形式表达上述问题
其中,两个等式之间并共享一个变量,存在简单连接,组成一个连通图。
可以根据在方程集合中检索已知变量,计数变量个数,来确定依次求解顺序
- 在
eq1
中检索,发现已知b
、c
两个变量,记eq1
被求解,记a
已知 - 在
eq2
中检索,发现已知a
、y
两个变量,记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)\)
为了在程序中储存这种表达式,可以用树的形式表达等式两边的部分
考察目标未知变量所在子树方位,将另一棵子树移动到另一棵树上。
- 每次将有别于未知变量所在的子树,移动到不包含未知量的树根部。
- 对于无次序的运算符(+、*)等,总是在移动后更改为其逆运算,总是将被移动的子树置于右侧
- 对于有次序的运算符(-、/)等
- 若被移动子树原先处在左侧,则移动后仍处在左侧,且保留运算符
- 若被移动子树原先处在右侧,则移动后运算符更改为其逆运算,任意置于左、右侧
- 迭代上述步骤,直到未知变量单独作为一棵树
结论
本文提出了一种计算题自动做题机器的设计方案构思,并对基本的原理进行了设计和探讨。但未给出具体实现,且未对方程之间消元、化简进行探讨。未来将对上述问题进一步开展研究,有望解决学生做计算题耗时大的难题。