数学鉴赏课程论文

数学游戏“数三角形”的可编程图论模型

 

摘要

本文研究上课时所提到的数学游戏“数三角形个数”问题。

首先,本文介绍了数学游戏、图论相关背景,重述、分析了上课时的“数三角形个数”问题。模型一为老师上课介绍的分类讨论,人工数数的方法。可让人更有条理地分类、计数,得出题中共有35个三角形。但当图中分割情况更复杂时,模型一无法用计算机实现,人工计算存在效率低下、错误率高等问题。

针对模型一的缺点,本文利用图论、线性代数等知识,提出了一种可编程计数的图论模型,即模型二、三、四。

模型二将形象的图形转化成模块与模块之间的邻接图,表示模块之间的连通性,从而可使计算机读取。若干个模块若能拼接成一个三角形,那么其中每个模块必至少与其他一个模块连通。因该邻接图为无向图,且为稀疏矩阵,模型二帮助跳过了许多不需要进入判断是否为三角形环节的组合情况。实现时的算法复杂度低,运行速率快。

模型三通过建立点与点的邻接图矩阵,表示点之间的连通性。多个模块拼接时,平面内存在多个点。结合平面几何知识,通过坐标最值取出决定三角形形状的外围点。仅当外围点个数为3,两两连通且不共线时,该组合才有可能为三角形。

模型四完善了模型三所不能考虑到的一些情况。当且仅当所有非外围点在三角形边上或内部时,所拼接图形才为三角形。通过利用模型三与平面几何知识判断点是否在边上。通过线性代数向量叉乘知识,判断点是否在三角形内。从而判决出该种模块组合拼接成的图形是否为三角形。

本文通过上述模型,将该类问题纯人工计数方法抽象为数学化的、易用计算机计算的数学模型。当待数图形分割更加复杂、模块数量更多时,通过基础的matlab编程验证,计算机依然可根据这些模型快速、准确、高效地算出正确答案。

关键词:图论 邻接图 计算机求解 线性代数 数三角形游戏

一、问题背景

1.1、数学游戏概述

数学游戏是一种智力游戏。它主要是将各种各样的数学问题渗透到游戏当中,使人们在做游戏的过程中用到相关的数学知识,并体现一定的数学思想和数学方法,从而激发大众对数学的兴趣,提高学习数学的自信心。相比一般游戏它具有形象性、灵活性两大特点。它通过生动有趣的事例将抽象的数学知识形象的表示出来,将枯燥的数学符号具体化。数学游戏不同于数学习题,表现同一数学知识的形式灵活多样,同时做游戏的方式和方法也不拘一格,足以让学生有较大的创造空间。[1]

1.2、 图论知识背景

 

图论是近年来发展迅速而又应用广泛的一门学科。它最早起源于一些数学游戏的难题研究,以及在民间广泛流传的一些游戏难题。以后随着科学的发展,图论在解决工程科学、运筹学、网络理论、信息论、控制论、博弈论以及计算机科学等各个领域的问题时,显示出越来越大的效果[2]。在图论发展的过程中,惠特尼、爱多士、塔特等[3]数学家做出了杰出的贡献,最终利用图论知识解决了四色问题。

1.3、图论在数学问题与数学游戏中的应用

图论知识在数学问题、数学游戏中有着十分广泛的应用。如:经典的七桥问题[4]、渡河问题[5]、棋盘构形中同色矩形问题[6]、韩信勒马分油问题[7]等。并在数学竞赛[8]中有一定的应用。图论知识可以将生活中形象的问题抽象成数学问题,将一些看似别的领域的知识抽象成数学可表示、计算机可求解的问题。

二、问题重述

在五月份的数学鉴赏课堂上,老师曾出过这样一个数学游戏问题:给出一个图形,如图一所示,数出图形中三角形的个数。

图一 问题原图

三、问题分析

针对本问题,提出四个数学模型。

第一个模型为上课时老师所介绍的模型,即分类讨论、人工数数法。根据组成最终三角形的小模块个数对其进行分类讨论。先数由一个小模块构成的三角形的个数,再数由两个模块构成的三角形的个数,以此类推。该方法不易用计算机实现,人工操作速度、精度难以保证。

第二个模型为模块与模块的邻接图模型。将题目中的1~11模块抽象成点,通过一个邻接图表达各个模块之间的连通性。在模型一的方法基础上,该模型可确保所数三角形无遗漏、跳过一些不必要的判断,并易于计算机存储问题数据的模型。

第三个模型为点与点的图模型。该图表示任意两点的连通关系。并利用平面几何知识找出可能确定每种情况下的三角形形状的三个“外围点”。仅当三个“外围点”两两连通并不共线,才有可能组成三角形。

第四个模型为判断点与线关系的线性代数模型。通过模型三可判断出某点是否在另外两点所构成的线段上。通过向量叉乘的结果可知某点是否在三角形内部,从而决定这些点与模块所构成的图形是否为三角形。至此即可让计算机无遗漏、高效地数出图中三角形个数,并可对一般化情况进行推广。

定义n为拼接成图形的模块数量,n2时,判断流程如图二所示:

 
 

图二 判决图形是否为三角形流程图

四、符号说明及名词定义

4.1、外围点

三角形由且仅由平面内三个点唯一确定。在此我们称确定三角形形状的三个点为“外围点”。每个外围点的横或纵坐标中至少有一个坐标为平面上所有点的横或纵坐标的最值。非外围点应位于三个外围点所围成的图形边上或内部,平面上所有点才能构成一个三角形。

4.2、模块与点的定义

如下图的图三、图四,为该图中11个小模块、交点分别按照图中所示进行1~11与A~G的编号。称各模块为模块1,模块2……,各点为点A,点B……以此类推。

图三 原图中各模块定义示意图

图四 原图各点定义示意图

五、模型建立与求解

5.1.1、模型一的建立

模型一为分类讨论、人工数数法。即根据组成最终三角形的小模块个数对其进行分类讨论。先数由一个小模块构成的三角形的个数,再数由两个模块构成的三角形的个数,以此类推。

5.1.2、模型一的求解

首先讨论由一个小模块组成的三角形。观察易得1,2,3,4,5,8,9,11模块为三角形。故一个小模块所组成的三角形共8个。

接下来讨论由两个小模块所组成的三角形。观察易得1和2,1和5,2和3,2和6,3和4,3和7,4和8,7和8,8和11,10和11模块所组成图形为三角形。故由两个小模块所组成的三角形共10个。

同上可得,由三、四、五、六、七个模块所组成的三角形各有8、5、1、2、1个。

根据上述分类讨论结果可知,该图形中共有8+10+8+5+1+2+1=35个三角形。

5.2.1、模型二的建立

当图中模块数足够大时,模型一的方法因属于人工判别法,难以用计算机实现,也将变得不可靠。且在数由若干个小模块组成的三角形个数时,需要遍历所有情况进行判断是否为三角形,否则易出现差错,造成效率低下。

针对模块一上述两个缺点,提出模型二,即模块与模块的邻接图模型。根据图论相关知识,将图中每个模块抽象成点,通过模块与模块的邻接图矩阵表示模块与模块之间的连通性。设k(i,j)表示矩阵中第i行第j列的位置,则

根据此规则,可对本题的图形建立邻接矩阵,如图五所示。

图五:根据本题原图建立的模块邻接图矩阵

该矩阵反应了模块与模块之间的连通性。由于1和2相联通等价于2和1相联通,因此该图是一个无向图。对于无向图,我们只需考察其右上方部分或左下方部分即可。

由图形可直观地看出,处于边缘的模块大多只与两个模块存在邻接关系,处于中间的模块至多也只与四个模块存在邻接关系。在图论中,我们用度描述一个点连通的其他点的数量。显然,在此类数三角形问题中,每个模块的度都远小于总模块数。故该邻接图是一个0的数量远大于1的稀疏矩阵。

易证明,若几个模块所拼成的图形为三角形,那么在这几个模块中,每个模块至少与其他一个模块存在邻接关系,以保证它们可以拼起来。如:考察模块1,2,3,10是否有可能拼成三角形时,由邻接图可知,10与其余三个模块均不连通,则不需判断该模块是否为三角形即可直接舍弃该情况。再如:考察模块1,2,3,4是否有可能拼成三角形时,由邻接图可知,1与2连通,2与3连通,3与4连通,故1,2,3,4可以拼成一个连通的图形,再去判断其是否为三角形。如图六中模块1与模块2、3均不连通,因此模块1,2,3无法构成一个三角形。

图六 因模块之间不连通所以无法构成三角形的情况

综上可知,在对一个组合是否为三角形进行判断前,我们可以先根据邻接图快速地判断出其是否能组成一个连通的图,若无法组成,则可直接跳过该阶段,若可组成,则对其进行判断。又因为模块与模块之间的邻接图是一个无向图,且为0的数量远大于1的稀疏矩阵,故所需遍历的情况将大大减少,且根据邻接图将不会出现遗漏等情况,易于用计算机实现求解。

5.2.2、模型二的求解

继承模型一分类讨论的思想,先考虑由一个模块所组成的三角形的情况,此情况下有8个三角形。

接着考虑多个模块组成三角形的情况。当考虑两个模块时,只需考虑邻接图中值为1的组合情况,并将需判断的连通组合情况记录入一个表中。当考虑三个模块时,对刚才生成的表进行遍历,假设表中的第n项的两个模块为a,b,则找出a,b两个模块分别连通的模块(除了a,b本身)构成一个集合。例如,假设a与b,c模块连通,b与a,d模块连通,则构成集合{c,d}。每次从集合中取出一个模块加入该表该项中的情况进行判断,如此时应分别讨论a和b和c,a和b和d这两种情况,并将本表所引出的讨论情况记在一个新表中,方便下一轮继续讨论。以此类推,当考虑k个模块的情况时,若k>11,则结束。

根据此方法判断,不难求出三角形总数为35个。

5.3、模型三的建立

模型二给出了一种可让计算机无遗漏地遍历、并大大减少了判断次数的方法,但是判断时仍需人工判断其组合是否为三角形。

5.3.1、邻接图矩阵

针对模型二仍存在的问题,提出模型三,即关于点的邻接图。设L(i,j)表示矩阵中第i行第j列的位置,则

根据此规则,可对本题的图形建立点的邻接矩阵,如图七所示。

图七:根据本题原图建立的点与点邻接图矩阵

5.3.2、外围点

在本文4.1节已定义过外围点的定义,现给出其数学模型。

易知存在由多个模块所确定的n个点时,若这些模块可构成三角形,则外围点的坐标(xi,yi)需至少满足如下条件之一:

由此可确定出多个模块所拼接图形的外围点。仅当该图形的外围点有三个,即这三个点中有两个点满足上述条件之一,有一个点满足上述条件中的两个,且三点两两之间连通、不共线时,该图形才可能为三角形。

5.4.1、模型四的建立

模型三已可判断出多数情况下的图形是否为三角形,但存在这样一种情况,满足模型三条件但所拼接图形不为三角形,如图八所示。此时A,B,C为外围点,两两连通且不共线上,但D点的存在使拼接图形不为三角形。

图八 仅根据模型三无法正确判决的情况

因此在找出三个外围点后,仍需对多余的点进行考察。三角形由且仅由平面上三个点唯一确定。若平面上有其他点,则应位于该三点所组成线段上或围成图形的内部。对此,建立模型四,即线段与非外围点的关系模型。

5.4.1.1、非外围点在三角形边上的情况

根据平面直线方程与坐标关系可知,用Ax,Ay,Bx,By,Dx,Dy分别表示点A,B,D的横纵坐标,若点D的横纵坐标同时满足如下关系时:

点A,B,D三点共线,且点D在线段A,B上。点A,B,D所组成的线段可用点A,B所组成的线段表示,此时点A,B,C,D组成的图形仍为三角形。

5.4.1.2、非外围点在三角形内的情况

由平面几何知识可得,假设点A,B,C为某一拼接图形的外围点且不共线,点D为非外围点且不在AB,BC,AC所在的直线上时,若这四点所确定的图形为三角形,则点D必在该三角形内。

由线性代数知识可知,当点D在三角形内时,他们在坐标上的关系应满足:

其中涉及到的向量运算符号为向量的叉乘。设二维向量,分别为(ax,ay),(bx,by),则叉乘运算结果为:

仅当满足模型三的组合满足模型四两种情况的任意一种时,才判决该组合组成了三角形。通过matlab编程可计算出图中共有35个三角形,运行时间约1秒。

六、模型评价

模型一为上课时老师介绍的方法,根据组成最终三角形的小模块个数对其进行分类讨论。此方法需要遍历每一种组合情况,需进行大量通过图论模型可以跳过的判断,耗时较多,且因不便用计算机求解,无法避免人工数数难免会出现的误差可能。

模型二利用图论知识,决定了遍历过程中哪些模块组合情况需要进入判断是否为三角形的阶段。相比模型一最大的优点是可通过计算机编程实现,代替人工。程序实现时,每轮通过建立一个表存储上一轮判决情况,算法复杂度控制在O(a*n^2)。因该邻接图矩阵为一个无向图,算法复杂度将减小一半。又因为其为稀疏矩阵,故a实际为一个远小于1的系数。在n没有非常大时(实际数学游戏、生活问题中n一般小于20),算法复杂度可近似为O(n)。

模型三、模型四利用图论、线性代数等知识,使计算机可判断模块拼接图形是否为三角形。其优势仍在于可用计算机编程解决,且算法复杂度为O(n),执行高效。当n很大、分割更复杂时,利用模型一的方法,人工判决耗时多、存在误差,而计算机可通过上述模型在几秒内给出精确结果。模型的一般性、可推广性强,不会受n的大小、图形分割情况等所影响。

七、参考文献

[1]. 成继红与刘良华, 数学游戏的价值及应用. 湖北科技学院学报, 2014(07): 第118-119页.

[2]. 孙乐, 具有长度约束的路径数研究, 2012, 河北工业大学. 第 50页.

[3]. 王丽丽, 图论的历史发展研究, 2012, 山东大学. 第 60页.

[4]. 肖鉴铿, 欧拉巧解七桥问题. 初中生之友, 2003(Z3): 第65-67页.

[5]. 达瓦与加央, 种种渡河问题及其算法. 科教文汇(上旬刊),2008(08): 第269-270页.

[6]. 沈群, 关于棋盘构形中同色矩形问题的一些探讨. 太原科技大学学报,2006(03): 第210-213页.

[7]. 降毅, 用图论的方法解两道智力题. 河套大学学报, 2004(01): 第14-16页.

[8]. 吴康与刘芸, 图论与中学数学竞赛(一). 中学数学,1987(11): 第29-34页.

数学游戏“数三角形”的可编程图论模型相关推荐

  1. java猜数游戏有次数限制_“去小学化”之后,可以这样开展数学游戏,让孩子玩中学,学中乐!...

    请上座   欢迎做客传播∕分享∕优质关注 游戏是孩子的天性,通过游戏,孩子学会合作.分享.学会很多未来生活需要的能力,学会长大. 游戏是孩子从自然人慢慢成长为社会人的一种基本方式,是通往大千世界的桥梁 ...

  2. 1000以内的回文数_杭城有学校带学生玩扑克、数糖果... “云课堂”下的数学很有趣!这些数学游戏,居家玩起来~...

    杭城开启"云课堂"数日,牛牛君默默关注了线上开课情况,发现趣味不少. 比如说小学低段的数学,学校大多提倡"玩""悟""探索&quo ...

  3. 空间三角形_幼儿园小班数学游戏活动教案《生活中的三角形》含反思

    小班数学游戏活动教案<生活中的三角形>含反思适用于小班的数学主题教学活动当中,让幼儿培养观察能力和操作能力,通过观察.操作认识三角形的特征并能找出和三角形相似的物体,培养对图形的兴趣和数学 ...

  4. 7和7的倍数游戏答案_培养3-8岁孩子数与计算能力的5种数学游戏,玩着学会数学...

    著名教育家蒙台梭利认为,孩子聪明与否在一定程度上表现为数学能力的高低,数学能促进幼儿认知的发展. 孩子的数学能力培养领域为四大部分,即:数与计算.量与实测.形状空间.逻辑推理关系.其中,"数 ...

  5. 工业革命前数千年人口经济_我们已经进行了数千年的编程

    工业革命前数千年人口经济 by Tautvilas Mečinskas 由TautvilasMečinskas 我们已经进行了数千年的编程 (We have been programming for ...

  6. 中班游戏电子计算机,幼儿园中班数学游戏:小小快递员

    中班数学游戏:小小快递员 [活动设计] 在数学教学中我发现我班幼儿在进行10以内物体数数的时候,能够正确点数排列成一排的物体,他们运用的点数方法常常是从左往右逐一点数的方法.在点数排列成不同形状的物体 ...

  7. 读《游戏之旅-我的编程感悟》笔记

    无意中发现了这本<游戏之旅-我的编程感悟>,可能因为自己对游戏开发感兴趣,刚开始读就无法自拔.读完这本书,首先感叹于云风丰富的编程经历,然后就是云风对自己编程经验的总结让我受益匪浅.云风的 ...

  8. 华院计算 | 他自己的生命游戏结束了,留给后人的数学游戏长存

    [一] 让我们从一个简单的游戏开始. 在一个很大(理论上无穷大)的围棋棋盘上,让黑子代表"生"而空格(称为白子)代表"死".在棋盘上的任何9个格子组成的正方形区 ...

  9. .net 集合分成几个等数量集合_巧用数学游戏,帮助幼儿轻松掌握12种数量关系!...

    网校在手 轻松教研 线上学习灵活高效 海量资源轻松获取 一键搞定园本教研 感知数量关系是幼儿园数学教育的核心内容,是发展幼儿数学思维的重要因素.那么,孩子在幼儿园阶段需要了解哪些数量关系呢?幼儿园有哪 ...

  10. 数学速算法_小学初中高中 数学奥数教材及习题讲解(共42册PDF)

    学习 勤育儿    |    爱自己 在育儿的道路上,家长和孩子一同成长:慢慢陪孩子走,把我们的时间浪费在孩子身上,是世间最有价值的浪费!资源介绍奥数对青少年的脑力锻炼有着一定的作用,可以通过奥数对思 ...

最新文章

  1. 一键生成HTML4和WAP站
  2. C# 去除文件和文件夹的只读属性
  3. C++阶段01笔记02【数据类型(整型、sizeof关键字、实型(浮点型)、字符型、转义字符、字符串型、布尔类型 bool、数据的输入)】
  4. 每天一道LeetCode-----KMP算法查找子串,重新实现strStr()函数
  5. python写入文件中文乱码_记一次python写入txt文件正常,但是写入csv文件中文乱码问题...
  6. 《北妹》:中国七零后作家的一次火山喷发(答记者问)
  7. PHP MySQL基础知识
  8. 4005基于邻接表的顶点的删除(C++,附思路)
  9. 查漏补缺:2020年搞定SpringCloud面试(含答案和思维导图)
  10. linux下查看日志基本命令
  11. 【路径规划】基于蚁群算法求解带时间窗车辆路径问题(VRPTW)matlab代码
  12. 【压力测试】用JMeter进行百科网站压力测试
  13. python模拟登录163邮箱_用python实现模拟登陆163邮箱
  14. 【ansys workbench】19.力学计算对比学习
  15. 【SAR综述】复杂场景单通道SAR目标检测与鉴别方法
  16. CSS flex属性深入理解
  17. iOS企业签名过程中APP频繁出现闪退是什么原因?
  18. android app 内嵌h5小游戏
  19. kumo词云使用io_Microsoft Kumo Search可以在Google上使用。 再次。
  20. localhost:8080打不开原因解决方法

热门文章

  1. python 黎曼猜想_黎曼猜想简析
  2. 不定长多项式展开后,展开式各阶系数的Java代码实现
  3. 进博会高端自行车领导品牌辐轮王盛赞第三届进博会精彩而富有成效
  4. 微信小程序 自定义组件之《转盘》
  5. 云服务器无限多开一个软件吗,只需要一个神器就能无限多开微信!
  6. 单片机p1口亮灯实验c语言代码,手把手教你单片机流水灯实验(详解)
  7. 0-0 从零开始的51单片机教程
  8. 【STM32技巧】HX711称重芯片详细说明
  9. Squid代理服务器基础_wuli大世界_新浪博客
  10. 【开发经验】quartz表结构说明(字段说明)