基于网络蜘蛛的ACM自动刷题系统设计与实现
计算机acm试题及答案

计算机acm试题及答案一、选择题1. 在计算机科学中,ACM代表什么?A. 人工智能与机器学习B. 计算机辅助制造C. 计算机辅助设计D. 国际计算机学会答案:D2. 下列哪个不是计算机程序设计语言?A. PythonB. JavaC. C++D. HTML答案:D3. 在计算机系统中,CPU代表什么?A. 中央处理单元B. 计算机辅助设计C. 计算机辅助制造D. 计算机辅助教学答案:A二、填空题1. 计算机的内存分为__________和__________。
答案:RAM;ROM2. 在编程中,__________是一种用于存储和操作数据的数据结构。
答案:数组3. 计算机病毒是一种__________,它能够自我复制并传播到其他计算机系统。
答案:恶意软件三、简答题1. 请简述计算机操作系统的主要功能。
答案:计算机操作系统的主要功能包括管理计算机硬件资源,提供用户界面,运行应用程序,以及控制其他系统软件和应用软件的运行。
2. 什么是云计算,它与传统的本地计算有何不同?答案:云计算是一种通过互联网提供计算资源(如服务器、存储、数据库、网络、软件等)的服务模式。
与传统的本地计算相比,云计算允许用户按需获取资源,无需购买和维护物理硬件,具有更高的灵活性和可扩展性。
四、编程题1. 编写一个程序,计算并输出从1到100(包括1和100)之间所有偶数的和。
答案:```pythonsum = 0for i in range(1, 101):if i % 2 == 0:sum += iprint(sum)```2. 给定一个字符串,编写一个函数,将字符串中的所有字符按ASCII 码值排序并返回。
答案:```pythondef sort_string(s):return ''.join(sorted(s))```五、论述题1. 论述计算机硬件和软件之间的关系及其对计算机系统性能的影响。
答案:计算机硬件是计算机系统的物质基础,包括CPU、内存、硬盘等,而软件则是运行在硬件上的程序和数据。
acm练习题

acm练习题ACM(ACM International Collegiate Programming Contest)是由ACM(Association for Computing Machinery)组织的国际大学生程序设计竞赛,旨在提高大学生在计算机编程和算法设计方面的能力。
ACM练习题是该竞赛的一部分,下面我们来详细了解一下。
一、什么是ACM练习题?ACM练习题是为了帮助学生提高编程和算法设计能力而设计的题目。
这些题目一般由ACM竞赛的组织方编写,内容涵盖了计算机科学的各个领域,包括但不限于数据结构、算法、图论、动态规划等。
ACM练习题的难度较高,要求学生具备一定的编程基础和解决问题的能力。
二、ACM练习题的特点1. 多样性:ACM练习题涵盖了各种不同类型的题目,包括数学题、字符串处理、图论等。
这些题目有的需要通过分析问题特点来设计算法,有的需要运用数学方法进行推理和证明。
2. 实用性:ACM练习题涉及到的问题往往与实际生活和工作密切相关。
解决这些问题需要运用计算机科学的基本原理和算法,并加以实现。
3. 时间限制:ACM练习题一般有时间限制,要求学生在有限的时间内完成解答。
这意味着学生不仅需要有解决问题的方法,还需要具备较快的编程能力和灵活的思维。
三、如何练习ACM题目?要想练习好ACM题目,学生需要掌握一些基本的方法和技巧。
1. 学习算法:ACM题目的解答离不开算法。
学生需要熟悉常见的算法,如贪心算法、动态规划、图算法等。
通过学习算法的原理和应用场景,可以更好地理解ACM题目。
2. 多做题目:练习是提高编程能力的关键。
学生可以选择一些经典的ACM练习题进行练习,尝试不同的解题思路和方法。
同时,可以参加ACM竞赛或者在线评测系统,与其他选手进行切磋。
3. 分析优化:在解答ACM题目的过程中,学生需要不断分析问题,寻找最优解。
可以通过改进算法、优化代码等方式提高解题效率。
四、ACM练习题的意义参与ACM练习题的学生可以获得一系列的益处。
网络蜘蛛程序算法相关资料分享

网络蜘蛛程序算法相关资料分享
搜寻引擎讨论---网络蜘蛛程序算法相关资料
如何用C语言构造蜘蛛程序?
"蜘蛛"(Spider)是Internet上一种很实用的程序,搜寻引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动,个人用户用蜘蛛程序下载Web页面以便脱机用法,开发者利用蜘蛛程序扫描自己的Web检查无效的链接对于不同的用户,蜘蛛程序有不同的用途。
那么,蜘蛛程序到底是怎样工作的呢?
蜘蛛是一种半自动的程序,就象现实当中的蜘蛛在它的Web(蜘蛛网)上旅行一样,蜘蛛程序也根据类似的方式在Web链接织成的网上旅行。
蜘蛛程序之所以是半自动的,是由于它总是需要一个初始链接(动身点),但此后的运行状况就要由它自己打算了,蜘蛛程序会扫描起始页面包含的链接,然后拜访这些链接指向的页面,再分析和追踪那些页面包含的链接。
从理论上看,终于蜘蛛程序会拜访到Internet上的每一个页面,由于Internet上几乎每一个页面总是被其他或多或少的页面引用。
本文介绍如何用C语言构造一个蜘蛛程序,它能够把囫囵网站的内容下载到某个指定的名目,程序的运行界面一。
你可以便利地利用本文提供的几个核心类构造出自己的蜘蛛程序。
?
C特殊适合于构造蜘蛛程序,这是由于它已经内置了HTTP拜访和多线程的能力,而这两种能力对于蜘蛛程序来说都是十分关键的。
下面是构造一个蜘蛛程序要解决的关键问题:
第1页共5页。
acm程序设计大赛试题

acm程序设计大赛试题题目:旅游管理系统一、问题描述随着信息技术的飞速发展,旅游业作为全球经济的重要组成部分,其管理和服务水平也在不断提升。
为了更好地服务游客,提高工作效率,我们计划开发一个旅游管理系统。
该系统旨在帮助旅游公司管理客户信息、行程安排、预订情况以及费用结算等业务。
本文将详细介绍该系统的设计要求和功能特点。
二、功能需求1. 客户信息管理系统应能够记录客户的基本信息,包括姓名、联系方式、身份证号码等。
同时,应支持对客户信息的增加、修改和查询功能。
此外,系统还应具备客户信息的分类和统计功能,便于旅游公司对客户群体进行分析。
2. 行程安排旅游公司需要根据客户需求和旅游资源情况,为客户制定合适的旅游行程。
系统应提供行程规划功能,包括景点选择、活动安排、住宿和交通预订等。
同时,系统应能够根据实际情况调整行程,并及时更新相关信息。
3. 预订管理系统应能够处理客户的旅游预订,包括景点门票、酒店房间、交通工具等。
预订管理功能应包括预订的创建、修改、取消和确认等操作,并能够实时更新预订状态,确保信息的准确性。
4. 费用结算旅游费用的结算是旅游管理系统的核心功能之一。
系统应能够根据客户的预订情况和实际消费,自动计算应付费用。
同时,系统还应支持多种支付方式,如信用卡、支付宝、微信支付等,并能够生成详细的费用清单和发票。
5. 数据安全与备份鉴于旅游管理系统中涉及大量敏感信息,系统必须具备严格的数据安全措施。
包括但不限于用户权限管理、数据加密、防止SQL注入等。
此外,系统还应定期进行数据备份,以防数据丢失或损坏。
三、系统架构设计1. 前端设计系统的前端设计应注重用户体验,界面友好、操作简便。
可以使用HTML5、CSS3和JavaScript等技术开发响应式网页,以适应不同设备和屏幕尺寸。
同时,前端应提供丰富的交互功能,如日历选择、地图展示、图片上传等。
2. 后端设计后端设计主要负责处理业务逻辑、数据存储和安全保障。
acm编程练习题

acm编程练习题ACM(即:美国计算机协会)编程练习题是指ACM国际大学生程序设计竞赛中的一些编程题目,旨在考察参赛选手在算法和数据结构等方面的能力。
这些题目常常要求选手设计和实现一个算法,在规定的时间和空间限制下解决实际问题。
ACM编程练习题具有一定的难度和挑战性,它的解题过程有时需要选手在理论基础上进行创新思维和灵活运用。
相比于传统的笔试或面试形式,ACM编程练习题更加贴近实际应用场景,能够真实地展现参赛选手的编程能力和逻辑思维能力。
为了更好地完成ACM编程练习题,选手需要熟练掌握常用的数据结构和算法,比如数组、链表、栈、队列、树、图等。
此外,对于一些经典的算法,如贪心算法、动态规划、分治法等,也有必要进行深入学习和理解。
在真实的竞赛环境中,选手还需要熟悉特定的编程语言和开发环境,比如C++、Java或Python等。
解决ACM编程练习题有着多种方法和思路。
选手需要熟悉各种问题的特点,根据问题所给条件进行合理的算法设计。
对于一些复杂的问题,可以利用数学方法进行简化和转化,从而找到更高效的解决方案。
在编程实现的过程中,要注重代码的可读性和可维护性,合理地使用注释和命名,避免代码冗余和错误。
ACM编程练习题的解题过程中,选手不仅需要具备扎实的编程基础和算法知识,还需要具备压力下的良好心态和团队合作精神。
在竞赛中,选手可能面临时间紧迫、出题者的陷阱、复杂场景等挑战,因此,选手们需要保持冷静、灵活应对,不断提升自己的解题能力和竞赛技巧。
总之,ACM编程练习题是一种非常有挑战性的编程竞赛形式,对选手的编程能力、算法思维和团队协作能力都提出了较高的要求。
通过积极参与练习和实战,选手们可以不断提升自己,在ACM竞赛中取得更好的成绩,并在实际工作中具备更强的编程能力。
(字数:413)。
网络蜘蛛的设计与实现

信息量爆炸式地成指数级增长,互联网中不乏许多转
载、重复的信息,对于互联网采集系统而言,网络蜘蛛
每天采集互联网中的相关信息,采集信息的数量非常
巨大。 重复的网页不仅占用磁盘空间,而且对搜索引
现 擎的效率也有非常大的影响。 因此,消重对搜索引擎
代 计
系统有着巨大的意义。
算
如果两个网页的链接是相同的,那么它们指向同
关键词: 网络蜘蛛; 布隆过滤器; 爬行策略
0 引言
进其他策略,同样不能满足专业领域搜索的需求。 通
随 着 Internet 规 模 的 飞 速 增 长 ,高 效 、准 确 地 获 得包含用户所需信息的网页,日益成为迫切需要解决 的问题,搜索引擎是解决这一问题的有效方法。 搜索 引擎以一定的策略在互联网中搜集、发现信息,对信 息进行理解、提取、组织和处理,并为用户提供检索服 务,从而起到信息导航的目的。 搜索引擎提供的导航服 务己经成为互联网上非常重要的网络服务。 搜索引擎 中核心部分之一是网页采集器,也叫网络蜘蛛,Internet 搜索引擎的所有数据都是通过网络蜘蛛获得的, 它决 定着整个系统的内容是否丰富、 信息是否能够得到及 时更新。 网络蜘蛛主要是指依赖 Web 页面之间的链接
1 网络蜘蛛爬行策略分析
的 URL 放进待抓取队列, 把已经处理过的原始网页
通用网络蜘蛛的爬行策略主要有以下两种方式: (1)深 度 优 先 搜 索 策 略 :只 考 虑 链 接 的 层 次 关 系 , 可将链接看成树型结构,深度优先搜索就是先访问链 接树的一个分支,再回到链接树的根节点访问另外一 个分支。 这种方式优点在于容易设计以及可以及时搜 索到某个链接下足够深度的链接;缺点是某些层次高 的链接不能够被及时访问甚至有可能访问不到。 (2) 宽 度 优 先 搜 索 策 略 : 宽 度 优 先 搜 索 是 按 照 链 接树的一个一个层次来进行访问。 这种方式的优点在 于爬行下来的网页质量较高,层次高的页面能够得到 及时的访问以及可以很好地保证链接间的层次关系; 缺点是只是简单地按照层次关系进行搜索,并没有引
acm竞赛题库 python版本
acm竞赛题库 python版本
正文:
ACM(Association for Computing Machinery)竞赛是计算机科学领域中的一项著名竞赛,旨在提高学生的算法设计和问题解决能力。
在ACM竞赛中,选手需要通过编写程序来解决一系列的问题。
为了帮助学习Python编程语言的选手,许多ACM竞赛题库都提供了Python版本的题目。
Python是一种简单易学的编程语言,它具有清晰简洁的语法,丰富的库函数和强大的功能。
Python在ACM竞赛中得到了广泛的应用,不仅因为它易于理解和实现,还因为它有很强的算法支持。
许多ACM 竞赛中的题目,比如图论、动态规划和数学问题,都可以用Python 来解决。
ACM竞赛题库的Python版本包含了大量的题目,涵盖了各个难度级别和不同类型的问题。
这些题目可以帮助选手提高他们的编程和算法能力,并且可以帮助他们更好地了解和掌握Python语言的特性和用法。
除了竞赛题库,还有一些在线平台和教程提供了ACM竞赛的Python 解题思路和示例代码。
这些资源可以帮助选手更好地理解问题的解决
方法,并通过实际的编程练习来加深对Python的掌握。
总结来说,ACM竞赛题库的Python版本为学习和掌握Python编程语言的选手提供了一个很好的平台。
通过解决这些题目,选手可以提高他们的算法设计和问题解决能力,并且可以更好地理解和掌握Python 语言的特性和用法。
基于ACM自动判题系统程序设计实践教学改革论文
基于ACM自动判题系统的程序设计实践教学改革探索摘要:文章针对程序设计传统教学模式存在的不足,提出了基于自动判题系统的实验探索,并总结了其优点和特色,在实际教学中取得了较好的效果。
关键词:acm;自动判题系统;程序设计;教学中图分类号:tp311.1-4 文献标识码:a 文章编号:1007-9599 (2011) 22-0000-02programming practice teaching reform based on acm automatic sub-title systemmei xushi,wang weibin(jinhua vocational and technical college,jinhua 321017,china)abstract:the traditional teaching model for program design shortcomings,proposed a system based on automatic sentence of experiments to explore issues,and summarizes the advantages and features,in the actual teaching and achieved good results.keywords:acm;automatically sentenced to question the system;programming;teachingc语言程序设计、java语言程序设计等课程,作为很多高校计算机大类专业的基础课和必修课,主要在于培养学生掌握程序设计和调试的基本方法,形成程序设计基本思想,使用c/java语言进行基本程序设计的职业能力,在整个专业培养目标中起到了重要的基础支撑作用。
本文针对程序设计传统教学模式存在的不足提出了基于自动判题系统的实验探索,取得了较好的效果。
ACM刷题指南
1. 12月下旬将举行新生赛。
新生赛有企业赞助,有奖金、t恤、礼品。
参加ACM 新生赛是一个锻炼自己、检验自己的好机会。
2. 加入新生群235783335,不打算参加ACM也建议加入,里面有ACM高年级同学,有问题可以交流,这样有助于学习C++.3. 在题库成功解决100题的同学可发邮件申请老带新。
将面试确认是否抄袭。
邮箱:holgst@,附上账号、姓名、班级。
==============================================================ACM题库地址: http://210.38.224.114点击网页下方“中文”选择语言。
本指南分以下四部分内容:一、注册账号二、提交代码三、结果信息解释四、题目分类(前100题)一、注册账号图1 注册账号二、提交代码1.点击网页右上角“登陆”,填写用户名密码登陆。
2.点击“问题”进入题目列表,点击题目名称查看题目,如图2所示。
图2 查看题目3.提交代码阅读题目后,可在开发环境下编写、测试代码。
编写好代码后点击题目下方的“提交”链接,如图3所示。
图3 提交代码下面以第1000题为例演示代码提交过程。
(1) 选择语言C++;(2) 输入代码(可从开发环境下拷贝代码粘贴到此处);(3) 点击submit提交代码。
如图4所示。
提交代码后页面转到状态列表,留意结果信息。
图5 结果列表三、结果信息解释1.Accept,程序正确。
2.Wrong Answer,程序有误,常见错误原因有:(1) 程序解法错。
(2) 解法正确,但没考虑周全,对于一些特殊数据输入,程序未能输出正确解。
例如第1013题,需要考虑a、b、c相等的情况。
(3) 程序有多余的输出提示。
例如程序中出现cout << "请输入两个整数”;这种语句。
需要严格按照题目的“输出”描述输出数据(即,若没要求输出提示信息,则不要输出)。
3.Presentation Error,程序输出答案正确,但格式错误。
搜索引擎中网络蜘蛛的研究与实现
络 资 源 ,并 对 其 分 析 ,获 得 包含 的 其他 链 接 ,利 用这 些链 接 向 整 个 网络 扩散 ,下 载 其 他 资 源。 测 试 了蜘 蛛 程 序 抓 取
网页的能力,并对 多线程 实现的利弊进行讨论 ,总结 了常 用的算法搜 索策略 ,提 出了后 续的研究方向。 关键词 : 搜 索引擎 ;网络蜘蛛 ;多线程 ; 索策略 搜
1 引言
随着互联 网的高速发 展 ,网络信 息越来 越多 。 目前列 大
其 作 流 程 如 图 1 J : 。
多数互联 网用户来说 ,搜索 引擎是其 获得各种 数据 的重要 途
径 。搜索 引擎 以一定 的策略在 互联 网中搜集 、发现 信息 ,对 信息进行理解 、提取 、组织 和处 理 ,并为用户提供检 索服务 , 从 而起到信息 导航 的 目的 ,著 名的搜索 引擎有 G ol、B iu oge ad
正如 它的名 字那样 ,网络蜘 蛛在 互联 网 内,通过 网页链 接 , 从 一 个 网 页爬 到 另 外 一 个 网 页 ,并 收 集 网 页 内 容 , 再 分 析 其 中的 链 接 ,进 入 另 一 个 页 面 。 理 论 上 , 网络 蜘 蛛 可 以 收 集 全
图 1
球所有服务器上的 网页信息 。
止 ,具体 流程如下 。 首先 网络 蜘蛛获得一 个 U L R ,根据数据 库 的记 录判 断该 U L是否处 理过 ,如 果没有 ,则下载对 应 网页 ,并 进行 网页 R
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于网络蜘蛛的ACM自动刷题系统设计与实现摘要互联网的发展日新月异,编程的门槛也越来越低,高薪吸引着众多人加入到IT行业。
这也使得越来越多的编程初学者需要强化自己的编程思维,他们可以通过在各个高校ACM平台上练习来提高自己的编程能力。
在没有老师、同学的帮助下,如何帮助初学者解决难度较高的题目,是一个值得研究的问题。
利用网络蜘蛛的技术为此类问题提供一个有效可行的途径,将它与ACM刷题结合起来,能更好地帮助初学者解决类似的问题。
本课题主要研究的主要内容包括:网页文本的自动抓取、答案文本的预处理、自动刷题器的实现。
分析了网页文本的特点和目标代码转换的关键技术,实现了基于网络蜘蛛的ACM自动刷题系统的总体设计及各个功能模块。
主要的功能模块分别为:网络蜘蛛、文本内容过滤、目标代码转换、自动刷题器。
首先分析了网络蜘蛛的遍历策略及.NET自带的网页解析器、答案文本预处理中文本过滤器与目标代码转换,在此基础上实现了自动刷题器,再使各个功能模块协调实现了自动刷题系统。
关键词:网络蜘蛛 ACM 文本过滤自动刷题1引言随着互联网的高速发展,编程的门槛也越来越低,高薪吸引着众多人加入到IT行业。
这也使得越来越多的编程初学者需要强化自己的编程思维,可以通过在各个高校ACM平台上练习来提高自己的编程能力。
而对于初学者来说,难度较高的题目也无法独立解决,需要自己借助网络平台、同学、老师求助等来解决这类难题。
为了更好的帮助这些初学者,可以利用网络蜘蛛的技术,将它与ACM 刷题结合起来,能更好地帮助初学者解决类似的问题。
1.1研究的意义互联网上资源与日俱增,如何在众多的资源当中快速有效地获取相关的资源并利用是我们研究的热点,基于网络蜘蛛技术为此类问题提供了一个切实可行的途径。
同样也可以利用网络蜘蛛技术完成ACM自动刷题,来帮助编程初学者提高编程能力,他们也不再需要去百度搜索题目资料,这也就简化他们刷题过程,提高编程效率,也为他们提供解决编程过程中遇到问题一种新的方式。
1.2 本课题研究的主要内容本文分析了在目前编程初学者存在的主要问题的基础上,提出一种基于网络蜘蛛技术ACM自动刷题解决方案,它能有效地帮助编程初学者,大大降低初学者手动搜索答案筛选的工作量。
基于网络蜘蛛技术的自动刷题涉及到网页文本的自动抓取、网页文本的预处理、网页文本的自动刷题器等。
该系统不仅可完成网页文本的自动刷题的能力,也可以用于信息搜索的优化,实现网络上资源的获取并选择利用。
1.2.1网页文本的自动抓取网络蜘蛛(即Web Spider)是目前搜索引擎从互联网上抓取目标WEB网页的广泛使用的工具。
庞大的互联网如同一个巨大的蜘蛛网络,那么Spider就是在互联网上的蜘蛛。
通过网络蜘蛛访问网页,抓取网页文本内容,然后对抓取的网页文本内容进行文本解析,从中提取用于自动刷题器的文本内容。
网络蜘蛛是通过上一个网页中的URL来寻找下一个网页。
一般地,从该网站的首页开始,获取该网站首页的内容,找到在该网页中的链向其他网页的链接,然后通过这些链接去寻找下一个网页,以此类推,直到该网站的所有链接都被遍历过为止。
网络蜘蛛对网页抓取分析,提取出网页文本中的某些关键信息或链向到其它网页的URL地址。
1.2.2答案文本的预处理答案文本预处理包括文本内容过滤和目标代码(即查找的题目所对应答案文本)转换两个子模块。
文本内容过滤是对网页文本进一步过滤,从中提取用于目标代码的文本内容。
目标代码转换是把经过过滤后的文本内容转换成可编译代码,其中的主要问题是HTML文件处理和目标代码中特殊字符的转换。
HTML文件当中的字符实体是为了在HTML中显示特殊的字符,而可编译代码不同于字符实体,可编译代码通过ASCII码来显示特殊字符,因此需要进行转换。
可编译代码的ASCII码与特殊字符一一对应,而HTML中通过实体与特殊字符一一对应。
这就使得网页文本的预处理变得复杂。
1.2.3自动刷题器的实现自动刷题器包括:用户自动登录、答案文本自动搜索、源代码自动提交、刷题状态自动判断,但如何使各个功能模块自动化处理协调是本系统的硬性标准。
目前,用户自动登录都是通过预先在数据库中保存账号实现的,本系统是否可以采用其他方式实现自动登录也是值得思考的。
答案文本自动搜索可以通过常用的百度搜索引擎实现,但如何结合网络蜘蛛技术实现自动搜索功能也是需要多加思考。
自动刷题状态判断这一部分可以采用与大多数系统一样,通过程序判断即可,但程序判断结果如何处理也是尽量做到智能化。
自动刷题器的实现也就能大大降低编程初学者手动搜索的工作量了。
因此,自动刷题器的实现及其关键技术是本课题研究的重点之一。
2总体设计在这部分主要介绍本课题总体设计的各功能模块,选取合理的开发平台和开发语言。
2.1功能模块基于网络蜘蛛的ACM自动刷题系统主要由网络蜘蛛、网页文本内容过滤器、目标代码转换、自动刷题器等模块组成。
总体结构功能模块图如图2-1所示。
图2-1功能模块图2.1.1网络蜘蛛网络蜘蛛的功能是从互联网获取网页页面的内容。
它能够根据权限获取站点的全部或部分网页文本资源。
通过网络蜘蛛技术可以实现答案文本的自动搜索,只要预先设定一个URL给网络蜘蛛,它可以抓取该网页中的链接到其他网页的URL。
这也就类似于,在百度搜索引擎下,输入关键字,查找关键字信息。
因此,利用网络蜘蛛技术是可以实现答案文本的自动搜索。
2.1.2网页文本过滤器网页文本过滤器主要是将网页中与答案文本无关的内容过滤掉。
诸如:网页中的多媒体信息、文档信息、HTML文件信息过滤掉,提取出所需的答案文本和子链接,将子链接保存下来。
2.1.3目标代码转换目标代码转换的功能是将文本内容过滤出的目标代码转换成可编译代码。
由于目标代码存在特殊字符,无法通过刷题平台编译系统,因此需要将特殊字符转换成可编译的特殊字符。
2.1.4自动刷题器自动刷题器功能包括:用户自动登录模块、答案文本自动搜索模块、源代码自动提交模块、刷题状态自动判断模块。
用户自动登录模块采用类似快捷键的方式实现自动登录的,答案文本自动搜索模块是通过网络蜘蛛技术实现答案文本在百度搜索引擎自动搜索的,源代码自动提交模块与自动登陆模块类似。
刷题状态自动判断是在对答案文本预处理以及文本完成目标代码转换成可编译代码后得到之后再紧接着判断刷题状态。
2.2开发平台选择开发一个操作简便、功能易于扩充、执行效率满足要求、信息处理灵活、网络交互能强力等特点的自动刷题工具,C#是一个很好的选择。
Visual Studio 2015 C#是基于Microsoft .NET平台的开发工具,在Microsoft .NET平台下,可以使用该平台提供的一系列的工具和接口来最大程度地开发本系统。
比如:借助强大的WEB控件组件可以轻松的实现IE浏览器的功能,这与JAVA相比,实现IE浏览器功能就简单不少。
此外,C#的另一个优点在它具有与C++类似的语法,但C++是一种混合式语言,而C#是完全面向对象的。
而且使用C#语言开发出较少bug的代码比用C++要方便得多。
在C#语言中,它具有以下特性来消除开发者经常会出现的bug:(1)在C++中,它需要开发者自己手动删除动态分配给堆的内存,而在C#中,我们并不需要这么做。
在C#中,采用自带的垃圾回收机制,它能自动在合适的时机回收不再使用的内存,因此不会出现像内存泄漏的情况。
(2)在C++中,会涉及到使用大量的指针,而在C#中,通过类实例的引用,有效避免了指针使用。
而且C#也不再支持指针类型数据,提高了程序安全性,从而使程序更加健壮。
(3)在C#中,C#的对象模型使得面向对象的编程思想有了更好的体现,它使用的是.NET框架的类库。
在.NET框架下,C#开发者拥有了一个逻辑结构一致的程序设计开发环境。
而在C++中,则更依赖于以继承和模板为基础的标准库,使得程序开发者的工作量会加大。
(4)在C#中,C#不再支持多重继承,通过从Object C中借鉴而来的接口实现多继承,能代替多继承大部分功能,而且也不需要管理多重继承层次关系。
3网络蜘蛛网络蜘蛛(Spider)又被称为网络机器人(Robot)或者爬虫(Crawler),它的主要目的是为获取在互联网上的信息。
当我们遇到问题时,第一反应便会想到去使用百度、谷歌等搜索引擎。
正当我们使用这些搜索引擎时一定会有这样的疑惑:互联网上的丰富的信息资源是如何被搜索引擎检索到的呢?了解了网络蜘蛛技术之后,显然这些搜索引擎正是运用了网罗蜘蛛技术才能够快速地找到如此之多的相关信息。
广度优先搜索网络蜘蛛基本工作的方式:首先查看其中一个页面内容,从中提取相关信息和URL链接,然后再访问该网页的所有URL链接提取相关信息和URL,以此类推,直到站点全部被访问完。
显然,网络蜘蛛工作方式就如同一张蜘蛛网,因此它被称为“网络蜘蛛”。
3.1网络蜘蛛的遍历策略整个互联网事实上是一个庞大的图,当中的每一个URL都类似于图中的一个节点,因此,对于网页遍历也可以采用图的遍历算法进行访问。
一般地,网络蜘蛛的遍历策略有三种:广度优先、深度优先和最佳优先遍历,这三种遍历策略与图的遍历一一对应。
首先,大多数网络蜘蛛会采用广度优先遍历。
广度优先的网络蜘蛛会优先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页,一层一层地访问[1]。
这是最常用的方式,使用这个方法可以提高网络蜘蛛抓取速度,因为它可以让网络蜘蛛并行处理。
深度优先遍历是指网络蜘蛛从起始页开始,跟踪每个子链接,访问完这条线路上所有网页之后再访问下一个起始页,继续跟踪子链接,以此类推,直到站点全部被访问完[2]。
这个方法的优点是网络蜘蛛比较容易设计实现。
最佳优先遍历策略又称为“页面选择问题”,为了先抓取重要的网页,可以采用最佳优先遍历策略,通常保证在有限带宽下,做到尽可能访问到重要的网页。
如图3-1所示的一个简单的网站结构拓扑图,使用不同的搜索策略,得到的搜寻路径自然也不同。
图3-1网站结构拓扑图按照广度优先遍历策略抓取算法,则可能的抓取顺序为:A,B,C,E,F,G,H,D。
如果按照深度优先遍历策略抓取算法,则可能抓取顺序为:A,C,G,D,再回溯抓取E,H,再抓取B,最后抓取F。
在图中存在着环路A-C-G-D-A,因此应采用适当的策略避免陷入死循环。
一种可行的方法是:将所有已经访问过的网站的URL地址存入到URL历史表中,对任何一个未被访问的网站,都应先将其URL地址与URL历史表中进行比较,若是一个新URL地址,则访问该网站,否则,不需要对该网站的访问。
因为我们不可能抓取所有的网页,系统开发者可以在网络蜘蛛中对一些次要的网站设置访问层数的限制,即对于超过一定层数的网页不再抓取。
例如,在3-1图中,假设A为网站起始首页,则A属于0层,B、C、E、F属于第1层,G、H属于第2层,D属于第3层。