Велес |
Отправлено: 18.11.2003, 14:03 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 18
|
Добрый день.
Крайне нуждаюсь в совете по сложившейся ситуации.
Задача:
Приложение предназначено для проведения химических расчётов. Существует несколько переменных, значения которых в принципе представляют собой двумерный массив размерностью примерно [100][1000000] (последняя цифра может быть либо чуть меньше либо чуть больше). При этом, таких массивов несколько, порядка 5. И мало того, значения в данных массивах могут меняться при варьировании исходных данных. В принципе как раз возможность проведения подобного варьирования и является главной задачей программы. Значения из этих массивов дальше поступают на дальнейший расчёт.
Вопрос:
Какими средствами можно данную проблему? Как я понимаю, попытки создать просто такой массив средствами Билдера не получится, поскольку даже при попытке объявить массив [100][100000] уже компилятор начал ругатца и обзывать меня не хорошими словами. Я в принципе его понимаю. Будет ли лекарством от этого использование БД?
Заранее благодарен. |
|
Admin |
Отправлено: 18.11.2003, 14:34 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Насколько будет заполнен данными такой массив ?
Если сильно — то не знаю что посоветовать, если немного, то:
Для этого есть такое понятие — разреженные массивы.
Советую обратиться к книге
"Теория и практика C++" для профессионалов Герберт Шилдт
(Изд. "BHV") из раздела "Литература"
QUOTE | Шифрование и сжатие данных, стандартные классы строк,
разбор математических выражений разреженные массивы,
шаблоны и их функции, методы параметризации, классы алгоритмов
сортировки |
Также можете попробовать через vector
---
И возможно, создавать надо не массив,
а таблицы master-detail в базе данных,
и работать не через массив, а через
таблицы и ( компоненты работы с базами данных )
(как вы и написали -
"Будет ли лекарством от этого использование БД?")
Скорее всего будет, вот только скорость работы с
базой данных такого размера может быть весьма медленной.
Отредактировано Admin — 18/11/2003, 15:40
|
|
Георгий |
Отправлено: 20.11.2003, 10:00 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
массивы 100*100 000 чисел типа double будут занимать ~80MB каждый т.е. 5*80=400MB. ОЗУ на машинах в институтах (как я понимаю этот рассчёт что-то вроде курсового?) редко достигает 128MB, по этому MS Windows будет большую часть времени работать с hdd (с файлом подкачки), а не с ОЗУ.
Если решение задачи удастся оформить как SQL запросы, то при использовании приличной СУБД (SQL Server, Oracle) с хорошим оптимизатором запросов задача будет решаться, по моему мнению, быстрее, чем в случае с массивами и подкачкой. Но в том случае, если удастся разобраться со структурой данных (определить какие операции будут выполнятся над ними и с какой частотой, диапазон изменения данных и т.п.) и в результате вписаться целиком в ОЗУ, то работа без СУБД будет значительно быстрее.
От себя могу порекомендовать книгу Бентли Дж. Жемчужны программирования. 2-е издание СПб.: Питер, 2002 в ней как раз есть много примеров из реальной жизни, как большие и медленные программы превращались в маленькие и быстрые
О массивах: такие большие надо создавать динамически |
|
Велес |
Отправлено: 21.11.2003, 12:30 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 18
|
Спасибо за ответы. Буду пробовать разные варианты.
2 Георгий: нет, это не курсовая — это кандидатская работа. |
|
|