《计算思维实训(2-3)》课程报告_丁家星-12120951

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算思维实训》课程报告

2013-2014学年冬季学期

《计算思维实训(2)》(0830A031)

课程报告

学号12120951 学院计算机工程与科学学院姓名丁家星手工签名

报告题目

成绩

平时工作课程报告成绩

完成情况(25%) 进步量(25%) 格式(20%) 内容(30%) 百分制五级分制

教师评语

教师签名

批阅日期年月日

[注] 五级分制成绩为:优秀(90-100),良好(80-89),中等(70-79),及格(60-69),不及格(0-59)。

对算法的认识

丁家星

(12120951,计算机工程与科学学院)

1算法概述

1.1 算法与问题求解

1.1.1 算法的定义

算法就是为了求解问题而给出的指令序列,可以理解为由基本运算及规定的运算顺序所构成的完整的解题步骤,而程序是算法的一种实现。计算机按照程序逐步执行算法,实现对问题的求解。简单来说,算法可以看成是按照要求设计好的有限的、确切的计算序列,并且这样的步骤和序列可以解决某一类问题。算法设计的重点就是把人类找到的求解问题的方法、步骤,以过程化、形式化、机械化的形式表示出来,以便让计算机执行。算法是一个十分古老的研究课题,然而计算机的出现为这个课题注入了青春和活力,使算法的设计和分析成为计算机科学中最为活跃的研究热点之一。1967年,D.E.Knuth指出“算法是贯穿在所有计算机程序设计中的一个基本概念”,所以,算法被誉为计算机学科的灵魂!

1.1.2 问题求解

用计算机解决实际问题,就是在计算机中建立一个解决问题的模型。在这个模型中,计算机内部的数据表示了需要被处理的实际对象,包括其内在的性质和关系;处理这些数据的程序;模拟对象领域中的求解过程。通过解释计算机程序的运行结果,便得到了实际问题的解。下面给出用计算机求解问题的一般步骤。步骤分为:问题分析、数学模型的建立、算法设计、算法表示、算法分析、算法实现、程序调试、结果整理文档编制。

1.2 算法的描述

1.2.1 基本控制结构的描述

计算机科学家已经证明只需要使用三种基本控制结构就可以构建解决任何复杂问题的算法。这三种基本控制结构是:顺序结构、选择结构和循环结构。为了更好地领会和理解这三种基本控制结构,下面将C 语言与N-S图两种描述方法对照给出。三种结构分别为顺序结构、选择结构、循环结构。

1.2.2 C算法描述约定

形式参数与实际参数之间信息传递的主要方式有两种:一是值传递,即将实参表达式的值依次传递给对应的形式参数,而形参的改变不会影响到实参,通常称为单向的传值过程;二是地址传递,即将实参变量的地址依次传递给对应的形式参数,这时对应的形参和实参就具有了相同的地址,也就是说他们共享地址空间,因此,若形参改变,则实参必然随之改变。

2 算法分析

2.1 算法的一些特点

2.1.1 算法的评价标准

1.正确性:说一个算法是正确的,是指对于一切合法的输入数据,该算法经过有限时间的执行都能产生正确的结果。正确性是算法设计最基本、最重要、第一位的要求。

2.可读性:可读性的含义是指算法思想表达的清晰性、易读性、易理解性、易交流性等多个方面,甚至还包括适应性、可扩充性和可移植性等。

一个可读性好的算法常常也相对简单。3.健壮性:一个算法的健壮性是指算法思想表达的稳定性、容错性、可靠性和环境适应性等。当出现输入数据错误、无意的操作不当或某种失误、软/硬件平台和环境变化等故障时,能否保证正常运行,不至于出现莫名其妙的现象、难以理解的结果甚至经常瘫痪死机等。4.时间复杂度:为了分析某个算法的执行时间,可以将那些对所研究的问题来说是基本的操作或运算分离出来,再计算基本运算的次数。一个算法的时间复杂度是指该算法所执行的基本运算的次数。

2.1.2 算法的时间复杂度

和算法执行时间相关的因素:问题中数据存储的数据结构、算法采用的数学模型、算法设计的策略、问题的规模、实现算法的程序设计语言、编译算法所产生的机器代码的质量、计算机执行指令的速度。算法效率的衡量方法:1.事后统计法是先将算法用程序设计语言实现,然后度量程序的执行时间。因为很多计算机内部又有计时功能,所以可通过一组或多组统计数据来衡量不同算法的优劣。2.事前分析估算法也称预先计算估计法,是指在算法设计时,事前评价其时空效率问题。

3 贪心算法

3.1 贪心算法定义

贪心算法可以简单描述为:对一组数据进行排序,找出最小值,进行处理,再找出最小值,再处理。也就是说贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望得到结果是最好或最优的算法。

贪心算法是一种能够得到某种度量意义下的最优解的分级处理方法,通过一系列的选择来得到一个问题的解,而它所做的每一次选择都是当前状态下某种意义的最好选择,即贪心选择。即希望通过问题的局部最优解来求出整个问题的最优解。这种策略是一种很简洁的方法,对许多问题它能产生整体最优解,但不能保证总是有效,因为它不是对所有问题都能得到整体最优解,只能说其解必然是最优解的很好近似值。3.2 贪心算法的基本思路与实现过程

3.2.1 贪心的基本思想

用局部解构造全局解,即从问题的某一个初始解逐步逼近给定的目标,以尽可能快地求得更好的解。当某个算法中的某一步不能再继续前进时,算法停止。贪心算法思想的本质就是分治,或者说:分治是贪心的基础。每次都形成局部最优解,换一种方法说,就是每次都处理出一个最好的方案。

利用贪心策略解题,需要解决两个问题:

(1)该题是否适合于用贪心策略求解;

(2)如何选择贪心标准,以得到问题的最优/较优解。

3.2.2 贪心算法的实现过程

(1)应用同一规则F,将原问题变为一个相似的、但规模更小的子问题;

(2)从问题的某一初始解出发:

While(能朝给定目标前进一步)

求出可行解的一个解元素;

由所有解元素组合成问题的一个可行解。

3.2.3贪心算法的核心

贪心算法的核心问题是选择能产生问题最优解的最优度量标准,即具体的贪心策略。

贪心策略是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优解)的一种解题方法。其实,从“贪心策略”一词我们便可以看出,贪心策略总是做出在当前看来是最优的选择,也就是说贪心策略并不是从整体上加以考虑,它所做出的选择只是在某种意义上的局部最优解,而许多问题自身的特性决定了该题运用贪心策略可以得到最优解或较优解。

3.2.4贪心算法的特点

贪心算法的最大特点就是快,通常是线性二次式,不需要多少额外的内存。一般二次方级的存储要浪费额外的空间,而且那些空间经常得不出正解。但是,使用贪心算法时,这些空间可以帮助算法更容易实现且

相关文档
最新文档