diff --git a/README.md b/README.md index f97c08f..e223b12 100644 --- a/README.md +++ b/README.md @@ -219,6 +219,8 @@ Random::Random(bool pseudo) # 3. 系统实现 该程序使用C++语言,主要用到了STL中的queue队列和cmath库中的exp()函数等。开发工具是CodeBlocks和VS Code。 + + 项目的文件结构如下: main.cpp:主程序文件,包含程序的主函数和主要逻辑。 Random.h和Random.cpp:随机数生成的类,包含生成随机数和泊松分布的函数。 @@ -245,12 +247,15 @@ struct plane{ int in_queue_time; } plane; ``` + + 该程序中使用的队列数据结构具有以下特点: 1.先进先出:队列是一种先进先出(FIFO)的数据结构,元素在队列中的顺序是按照进入队列的顺序决定的。在该程序中,飞机进入队列后就不能直接访问,需要按照队列中的顺序依次处理。 2.可以动态增长:队列的容量可以动态增长,队列中的元素数量不受空间限制。 3.可以通过指针实现链式存储:队列可以通过指针实现链式存储,不需要连续的存储空间,因此可以更加灵活地管理内存空间,避免内存浪费。 4.支持入队和出队操作:队列支持入队和出队操作,可以用于实现一些类似于任务派发、消息队列等功能。 + ## 3.2 核心算法的实现 该程序的核心算法主要是实现飞机的降落和起飞过程的模拟。具体来说,可以将核心算法分成以下几个部分: 1.生成随机数:程序使用泊松分布的随机数生成算法来模拟飞机的到达时间。该算法需要生成一系列随机实数,因此生成随机数的过程可以看作是核心算法的一部分。 @@ -277,6 +282,7 @@ int main() Random variable; ``` + 该算法的时间复杂度为O(n),其中n为模拟的时间,即模拟了n个时间单位。在每个时间单位内,程序需要进行一些基本的操作,如生成随机数、检查队列是否为空、取出队列中的第一个元素等。这些操作的时间复杂度都是O(1),因此程序的总时间复杂度为O(n)。 该算法的空间复杂度为O(m),其中m为队列的最大容量。程序中定义了两个队列,每个队列最多可以存储m 个元素。因此程序的总空间复杂度为O(m)。在程序运行过程中,队列中的元素数量不会超过m,因此空间复杂度是稳定的,不受模拟时间n的影响。需要注意的是,程序中还使用了一些变量来记录总飞机数、总等待时间等信息,但是这些变量的数量较小且与模拟时间无关,因此可以认为它们对空间复杂度的影响可以忽略不计。 @@ -325,6 +331,7 @@ int main() 输入的飞机数量超过了队列的最大容量:如果输入的飞机数量超过了队列的最大容量m,则程序只会处理前m架飞机,忽略掉超过m架的飞机。 ``` + # 5. 总结