《算法设计编程实验:大学程序设计课程与竞赛训练教材》——第2章 模拟法的编程实验

简介: 本节书摘来自华章计算机《算法设计编程实验:大学程序设计课程与竞赛训练教材》一书中的第2章,作者:吴永辉,王建德著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第2章 模拟法的编程实验

模拟法原本是科学实验的一种方法,即先在实验室里设计出与研究现象或过程(原型)相似的模型,然后根据模型和原型之间的相似关系,间接地研究原型的规律性。这种实验方法后来被引入到计算机编程。原因是要求编程解决的许多问题具有不确定的性质,有些问题甚至很难建立数学模型,或者很难建立递推、递归、枚举、回溯法等常用算法。在这种情况下,一般采用模拟策略,即编程模拟某个过程,通过改变数学模型的各种参数,进而观察变更这些参数所引起过程状态的变化,由此展开算法设计。计算机模拟一般从形成问题到最后模拟实验需经过七个步骤(如图2-1所示):
1)形成问题,明确模拟的目的和要求。
2)尽可能收集和处理与问题相关的数据。
3)形成数学模型。找出影响问题解决的各个要素,并描述它们在各时刻的状态的有关变量(一般包括输入变量、状态变量和输出变量)或参数;确定各要素之间相互作用和影响的规则,即描述变量之间的函数关系。选择参数和变量的时候,还须考虑它们能否辨识或求解,以及模型最后是否适于检验。注意,模型一般分为两种:
重现型,即模型能重现真实的过程或性能。
预测型,即模型能有效预测未来的趋势。
由于模拟过程一般是随时间或指令的顺序变化的,因此通常采用按时序模拟或按指令行事的方法。
4)根据收集的数据确定或估计模型中的参数,并选择模型的初始状态。
5)设计算法,编制程序。
6)程序验证,检验程序与数学模型之间的一致性,以及输入量的合理性。
7)进行模拟实验,对给定的输入在计算机上执行程序。分析结果数据,收集和整理实验结果并作出解释。必要时可改变输入量或部分模型结构,重新进行实验。
image

编程模拟的形式一般有两种:
1)随机模拟:题目给定或者隐含某一概率,设计者利用随机函数设定某一范围的随机值,将符合概率的随机值作为参数。然后根据这一模拟的数学模型展开算法设计。由于解题过程借助了计算机的伪随机数发生数,其随机的意义要比实际问题中真实的随机变量稍差一些,因此模拟效果有不确定的因素。
2)过程模拟:题目不给出概率,要求编程者按照题意设计数学模型的各种参数,观察变更这些参数所引起过程状态的变化,由此展开算法设计。模拟效果完全取决于过程模拟的真实性和算法的正确性,不含任何不确定因素。由于过程模拟的结果无二义性,因此ACM竞赛大都采用过程模拟。
本章着重介绍过程模拟,展开三种模拟方法的实验:
1)直叙式模拟。
2)筛选法模拟。
3)构造法模拟。

相关文章
|
2月前
|
算法 数据安全/隐私保护
火山中文编程 -- MD5算法和SHA算法
火山中文编程 -- MD5算法和SHA算法
19 0
火山中文编程 -- MD5算法和SHA算法
|
4月前
|
算法 Java
算法编程(三十):交替合并字符串
算法编程(三十):交替合并字符串
45 0
|
4月前
|
算法
算法编程(二十八):重新排列单词间的空格
算法编程(二十八):重新排列单词间的空格
35 0
|
4月前
|
算法
算法编程(二十七):千位分隔数
算法编程(二十七):千位分隔数
40 0
算法编程(二十七):千位分隔数
|
4月前
|
存储 算法
算法编程(二十六):判断路径是否相交
算法编程(二十六):判断路径是否相交
29 0
|
4月前
|
算法
算法编程(二十五):检查单词是否为句中其他单词的前缀
算法编程(二十五):检查单词是否为句中其他单词的前缀
35 0
|
3月前
|
机器学习/深度学习 算法
机器学习 - [集成学习]Bagging算法的编程实现
机器学习 - [集成学习]Bagging算法的编程实现
32 1
|
2月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
73 0
|
24天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
33 0
|
1月前
|
存储 算法 JavaScript
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(二)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
28 0

热门文章

最新文章