论文部分内容阅读
随着ACM/ICPC国际大学生程序设计竞赛(ACM InternationalCollegiate Programming Contest,简称ACM/ICPC)在国内高校中渐渐普及起来,很多大学都希望能派出更多的队伍,让更多的学生有机会参加这个赛事,而这就对教练提出了更高的要求。具体体现在以下三个方面:(1)如何选取知识较全面的队员去参加比赛。由于ACM/ICPC比赛的出题范围比较广,因此,要求参赛队员的知识面也比较广,只能这样才能更好地适应这项比赛。(2)如何对队员组队。ACM/ICPC比赛是三个人一组去参加比赛的,因此,如何组队以发挥出团队的最佳效果是十分重要的。(3)如何做针对性的训练。随着比赛队伍的增多,竞争必然加剧。因此,在平时训练中给队员一些关于赛区题目特征的指导意见以提升训练质量也是必要的。针对以上问题,本文提出了一种基于领域知识库的程序代码挖掘方法。该方法的基本思想是通过分析队员在比赛前训练留下的大量程序代码或者各赛区的历年解题参考代码,挖掘出其中蕴含的知识特征,为解决上述问题提供帮助。具体的工作有以下几个步骤。首先,建立领域知识库。领域知识库的主要功能是在程序代码转化和知识点多元统计分析的时候提供支持,它是整个研究的基础。本文是利用领域本体的建模方法来实现机器可以理解的程序设计领域知识库的。其次,程序代码的转化。具体来说就是把多组源代码集转化为知识点使用统计表,这是由于程序代码是非结构化数据,是无法对其直接统计分析的。本文是通过开发语言判断、词法分析和知识点判断及提取这几个模块来实现的。然后,知识点多元统计分析。这是我们完成对队员知识特征分析或者赛区出题特征分析的方法,具体使用的是主成分聚类分析。首先,进行主成分分析,把变量转化为几个综合变量,并实现对队员的综合评价;接着,进行聚类分析,实现队员或者赛区知识特征的分类描述。最后,利用一个实例详细讲解了该方法的实现过程,并对应用结果进行了分析。