Update README.md

master
p8765lwso 1 year ago
parent bd58be2675
commit 34df557bf2

@ -218,6 +218,7 @@ Random::Random(bool pseudo)
```
# 3. 系统实现
该程序使用C++语言主要用到了STL中的queue队列和cmath库中的exp()函数等。开发工具是CodeBlocks和VS Code。
@ -227,6 +228,7 @@ Random::Random(bool pseudo)
plane.h飞机结构体的定义。
README.md项目文档包含程序的介绍和使用说明。
程序的主要函数包括:
Random():构造函数,初始化随机数生成器。
random_real()生成0~1之间的随机实数。
@ -236,10 +238,12 @@ Random::Random(bool pseudo)
## 3.1 核心数据结构的实现
该程序主要使用了STL中的queue队列来实现飞机的降落和起飞队列。队列是一种先进先出FIFO的数据结构在这里用来存储等待降落和起飞的飞机。
在程序中定义了两个queue对象一个用于存储准备降落的飞机另一个则用于存储准备起飞的飞机。每个队列中存储结构体类型的plane对象表示每个飞机的编号和进入队列的时间。
在模拟过程中程序使用队列的push()函数将新到达的飞机加入队列中使用队列的pop()函数处理已经降落或起飞的飞机。程序还使用队列的empty()函数和front()函数来检查队列是否为空,并获取队列中的第一个元素。
如:
```cpp
@ -249,6 +253,7 @@ struct plane{
} plane;
```
该程序中使用的队列数据结构具有以下特点:
1.先进先出队列是一种先进先出FIFO的数据结构元素在队列中的顺序是按照进入队列的顺序决定的。在该程序中飞机进入队列后就不能直接访问需要按照队列中的顺序依次处理。
2.可以动态增长:队列的容量可以动态增长,队列中的元素数量不受空间限制。
@ -257,12 +262,15 @@ struct plane{
## 3.2 核心算法的实现
该程序的核心算法主要是实现飞机的降落和起飞过程的模拟。具体来说,可以将核心算法分成以下几个部分:
1.生成随机数:程序使用泊松分布的随机数生成算法来模拟飞机的到达时间。该算法需要生成一系列随机实数,因此生成随机数的过程可以看作是核心算法的一部分。
2.处理降落队列:程序在每个单位时间内,会从降落队列中取出第一架等待降落的飞机,并根据降落时间模拟飞机降落的过程。如果降落队列为空,则不进行任何操作。
3.处理起飞队列:程序在处理完降落队列中的飞机后,会从起飞队列中取出第一架等待起飞的飞机,并根据起飞时间模拟飞机起飞的过程。如果起飞队列为空,则不进行任何操作。
4.记录等待时间:程序在处理完每个队列中的飞机后,会记录每架飞机在队列中等待的时间,并累加到总等待时间中。
如:
```cpp
@ -284,6 +292,8 @@ int main()
该算法的时间复杂度为O(n),其中n为模拟的时间即模拟了n个时间单位。在每个时间单位内程序需要进行一些基本的操作如生成随机数、检查队列是否为空、取出队列中的第一个元素等。这些操作的时间复杂度都是O(1),因此程序的总时间复杂度为O(n)。
该算法的空间复杂度为O(m),其中m为队列的最大容量。程序中定义了两个队列每个队列最多可以存储m 个元素。因此程序的总空间复杂度为O(m)。在程序运行过程中队列中的元素数量不会超过m因此空间复杂度是稳定的不受模拟时间n的影响。需要注意的是程序中还使用了一些变量来记录总飞机数、总等待时间等信息但是这些变量的数量较小且与模拟时间无关因此可以认为它们对空间复杂度的影响可以忽略不计。
@ -293,6 +303,8 @@ int main()
先使用一组小数据量进行测试,检查程序是否能正常运行并输出正确的结果。
使用多组数据进行测试,包括一些边界值、特殊情况以及大量数据的情况,以检验程序的性能。
对于每组测试数据,记录输入和预期结果,并与程序输出的结果进行比较,以确定程序是否通过测试。
下面给出几个测试用例:
```
测试用例1

Loading…
Cancel
Save