Самый эффективный способ обработки сложных данных гистограммы? - PullRequest
1 голос
/ 06 февраля 2012

В настоящее время я реализую гистограмму, которая покажет очень крупномасштабные данные с использованием Qt, и у меня есть некоторые сомнения относительно того, какую структуру данных я должен использовать для своей задачи. Я буду отображать количество запросов, полученных от пользователей приложения, и способ отображения должен выглядеть следующим образом - в одном приложении, которое будет отображать различные гистограммы при нажатии разных «показать мне эти данные и т. Д.» * 1001 производится кнопками *

1) Здесь отображается гистограмма общего количества запросов за каждый месяц -4 месяца данных, I
сохранил четыре переменные и увеличивал их по мере того, как я ловил запросы, относящиеся к тем месяцам
в файле CSV -

2) Показать гистограмму общего количества запросов за каждый день в выбранном месяце. Я думал об использовании 4 QVectors для представления месяцев для этого, увеличивая каждый элемент вектора (дня), так как я пришел к этому конкретный день, например вектор представляет август месяц и всякий раз, когда я сталкиваюсь с данными с 2011-08-XY, я буду увеличивать (XY + 1) -й элемент этого вектора на 1 - моя вторая альтернатива - использовать 4 QLinkedList ради лучшая сложность, но я не уверен, что способы, которые я придумала, достаточно эффективны, и я готов выслушать любую другую идею.

3) Здесь все становится немного сложнее. Отобразите гистограмму общего количества запросов за каждый час в выбранный день и месяц. Представленные данные значительно умножаются, и я не знаю, какую структуру данных - или комбинацию структур - мне следует использовать для реализации этой. Возможно, список списков?

Любые идеи по моим проблемам в 2) и 3) будут полезны, заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

На самом деле, это не должно быть слишком неуправляемым, чтобы всегда делать запросы в час. Предполагая, что количество запросов в час никогда не превышает максимальное значение типа int, это всего лишь 24 дюйма в день = 32 бита или 64 в зависимости от вашей машины. Предполагая 32 бита, вы можете получить до 28 лет данных на МБ.

Нет необходимости переносить месяц / год - ваша программа может решить эту проблему. Просто присвойте час 0 самой ранней точке в ваших данных, которую вы сохраняете как константу, а затем определите дату на основе часов, прошедших с тех пор.

Это избавляет от необходимости иметь список списков или что-нибудь необычное - просто используйте массив, в котором каждый адрес содержит количество часов с 0 часа и количество запросов за этот час.

1 голос
/ 06 февраля 2012

Почему бы вам просто не использовать классическую базу данных? Когда вы начинаете задавать подобные вопросы, я думаю, что сейчас самое время рассмотреть более надежную структуру. Внутри любой БД реализовано множество структур данных, оптимизированных для разных типов доступа. Вы должны рассмотреть как минимум поиск, вставку, удаление, диапазон запросов. Нет такой структуры, которая лучше всех других по всем затратам, поэтому всегда есть компромисс.

Qt имеет некоторые классы базы данных , которые вы можете использовать. Я никогда не использовал библиотеку Qt SQL, но думаю, вам стоит попробовать. К счастью, в конце страницы есть руководство по программированию на Qt SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...