【问题标题】:Most efficient way to process complex histogram data?处理复杂直方图数据的最有效方法?
【发布时间】:2012-02-06 00:58:38
【问题描述】:

我目前正在实现一个直方图,它将使用 Qt 显示一个非常大规模的数据,我对我应该使用哪种数据结构来解决我的问题有些疑问。我将显示从应用程序用户收到的查询数量,我应该显示的方式如下 - 在单个应用程序中,单击不同的“显示此数据等”时将显示不同的直方图。按钮-

1) 这里显示每个月-4个月数据的总查询次数的直方图,I
保留四个变量并在我捕获属于那些月份的查询时递增它们
在 CSV 文件中-

2) 显示所选月份中每一天的总查询数直方图 - 我正在考虑使用 4 个 QVectors 来表示这个月份,递增向量的每个元素(天),因为我来了特定日期 - 例如该向量代表八月,每当我遇到带有 2011-08-XY 的数据时,我都会将该向量的 (XY + 1)th 元素增加 1- 我的第二个选择是使用 4 个 QLinkedList更好的复杂性,但我不确定我想出的方法是否足够有效,我愿意听取任何其他想法。

3) 事情变得有点复杂。显示选定日期和月份中每小时的总查询数直方图。所代表的数据以一种巨大的方式成倍增加,我不知道我应该使用哪种数据结构 - 或结构的组合 - 来实现这个。也许是列表列表?

任何关于我在 2) 和 3) 中的问题的想法都会有所帮助,在此先感谢。

【问题讨论】:

    标签: c++ performance qt data-structures


    【解决方案1】:

    实际上,总是每小时进行一次查询应该不会太难管理。假设每小时查询的数量永远不会大于最大 int 值,那么每天只有 24 个 int = 32 位或 64 位,具体取决于您的机器。假设 32 位,那么每 MB 可以获得长达 28 年的数据。

    无需转移月/年 - 您的程序可以解决这个问题。只需将 0 小时分配给数据中的最早点,将其保持为常数,然后根据此后经过的小时数计算出日期。

    这避免了必须有一个列表列表或任何花哨的东西 - 只需使用一个数组,其中每个地址包含自 0 小时以来的小时数,以及该小时的查询数。

    【讨论】:

      【解决方案2】:

      您为什么不简单地使用经典数据库? 当你开始问这类问题时,我认为现在是考虑更健壮的结构的好时机。在任何数据库中都实现了多种数据结构,针对不同的访问类型进行了优化。您至少应该考虑查找、插入、删除、范围查询。没有任何结构在所有成本上都比其他结构更好,因此总是需要权衡取舍。

      Qt 有some database classes 可以使用。我从未使用过 Qt SQL 库,但我认为您应该试一试。幸运的是,链接页面末尾有 Qt SQL 编程指南。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多