0

我正在做一份测试试卷的最后一道题,我迷失在算法的创建过程中。我的定义图看起来不错,但是我无法计算出计算月份方面的顺序。

问题如下:

交易记录文件包括以下详细信息:
- 一天内购买的客户数量 - 一天
内购买的总价值
- 当天的日期

编写一个模块化算法,使用此文件中的信息来计算每个月的客户总数和每个月的购买总值。这些信息应该记录在一个文件中。

提供一个定义图、一个用伪代码编写的算法,以及针对该问题陈述的两次桌面检查。

我被困在从哪里开始。

4

1 回答 1

1

这都是关于数据结构的。

您需要读取输入流,读取日期,找到该月的旧总数,然后将新的美元数和天数添加回总数中。(为了清楚起见,无论我在哪里说“月”,我的意思是月+年)。

一个简单的按月排列的数组可以工作,但由于月数是可变的,这将需要程序读取输入两次以查看数组范围,或者将它们全部保存在内存中,这两者都可能是不可能的。由于其他原因,它的结构很差。

下一步是链接列表,其中包含一个数据结构,其中包括月份和总计作为值。但这将要求您查找月份是否已经出现在列表中,对于每一行输入来说都是 O(n)。

再上一步。将月份/金额保存在按月份排序(索引)的二叉树中 - “排序列表”。找到合适的月份是订单日志(输入流中的月份),不能太大,因为即使10年也只有120个月。这样做的好处是您不必为输出报告再次对数据进行排序,并且可能是他们希望您使用的。

最有效的结构可能是有时被称为“字典”的结构。除非您有数千个月的时间,否则矫枉过正。http://www.dotnetperls.com/dictionary解释了这个数据结构。其他环境也有类似的东西;它是标准哈希表的变体。不同的 Dictionary 类有帮助函数来告诉你值的数量、列出键、告诉你键是否已经存在等等——你需要的那种东西。您将使用月/年作为键,使用美元数和客户数作为存储值。字典是恒定的时间,所以它们是有效的(但我怀疑是矫枉过正)。

于 2013-06-02T10:48:11.077 回答