1

Тема: OFF: Оптимизация алгоритма/метода расчёта

Коллеги, приветствую !
Прошу помочь в оптимизации алгоритма/метода расчёта сводной таблицы по заказу расходных материалов.
Смысл в следующем, каждый офис ежемесячно заказывает на следующий месяц расходные материалы (тонеры, картриджы, ленты к калькуляторам и т.д. и т.п. ~ 35 позиций).
Количество офисов ~ 200
Всё это хозяйство сводится в единую таблицу за каждый месяц:

                                               Период  №№

офис/рм       | картридж №1  |  тонер № 1  |  лента  | ...   ...            ...        | картридж №35
------------------------------------------------------------------------------------------------------------
Офис №1     |    кол-во         |  кол-во        | кол-во | ...   ...            ...        |      кол-во
Офис №2     |    кол-во         |  кол-во        | кол-во | ...   ...            ...        |      кол-во
Офис №3     |    кол-во         |  кол-во        | кол-во | ...   ...            ...        |      кол-во
...
...
...
Офис №200 |    кол-во         |  кол-во        | кол-во | ...   ...            ...        |      кол-во
ИТОГО        |    сумма NN      | сумма NN     |суммаNN| ...  ....            ...        |    сумма NN               


Имеется следующая база данных:

офис | период | наименование р.м. | кол-во | контроль

офис - наименование офиса сделавшего заказ
период - период, на который сделал офис заказ расходки
наименование р.м. - наименование расходного материала (тонер, картридж, лента и т.д. и т.п.)
кол-во - количество в штуках нужного расходного материала
контроль - 0 или 1 - признак того, что заказ проверен и его можно включать в итоговый свод.

Имеющийся сейчас алгоритм обеспечивает расчёт полного свода по всем офисам ~ 30-35 сек (комп - Celeron 1800 )
Есть желание оптимизировать алгоритм...

Немного истории: когда данное хозяйство внедрялось, то первоначально было задание просто сделать, чтобы заработало, офисов было ~ 50, время расчёта ~ 55-60 сек. При том количестве офисов оптимизировал алгоритм, время стало 9 сек. Сейчас вопрос снова назревает...
Я конечно перед руководством поставил "железные требования", но мне кажется алгоритм можно доточить...

P.S:  Задачу решать на VBS !!!

Времени не хватает... :-(

2

Re: OFF: Оптимизация алгоритма/метода расчёта

Два вопроса:
1) Чем не устраивают компилируемые языки?
2) Как можно предложить улучшенный вариант, если неизвестен оригинальный?(Celeron 1800 мало кто сможет нарыть )
3) Что представляет из себя база данных?

3

Re: OFF: Оптимизация алгоритма/метода расчёта

OFF:

Александр_ пишет:

Celeron 1800 мало кто сможет нарыть

Запросто . Могу и Celeron 266. И даже 8086 (именно что не 8088, а 8086).

4 (изменено: Евген, 2012-01-22 18:58:57)

Re: OFF: Оптимизация алгоритма/метода расчёта

Александр_ пишет:

Два вопроса:
1) Чем не устраивают компилируемые языки?
2) Как можно предложить улучшенный вариант, если неизвестен оригинальный?(Celeron 1800 мало кто сможет нарыть )
3) Что представляет из себя база данных?

На 2 вопроса - 2 ответа
1) - если это Java - то почему бы и нет... (как раз приступил к изучению)
2) Описываю существующий в "двух словах":
          а) создаю 2х мерный массив - в размер сводной таблицы, заполняю в ней офисы и расходники.
          а) по БД делаю выборку за данный период в рекордсет
          б) затем пробегаюсь по всему рекодсету (методом .FindFirst) в поисках офиса (из левого столбца сводной таблицы) и названия расходника (из верхней строки сводной таблицы)
3) БД MS Access

Времени не хватает... :-(

5

Re: OFF: Оптимизация алгоритма/метода расчёта

Евген пишет:

На 2 вопроса - 2 ответа


Евген пишет:

3) БД MS Access

А запрос идёт на другой компьютер или всё на этом несчастном Celeron'е?
Если на другой, то можно всю программу составить на запросах.
В противном случае всё время должно уходить на обработку этого запроса и сильно оптимизировать не выйдет. Разве что можно попробовать кэшировать результаты запросов(если часто запрашиваются одни и те же данные).

6

Re: OFF: Оптимизация алгоритма/метода расчёта

Всё на этом же...
вот ещё Java подучу, там вообще какая-то особенная работа с массивами идёт !!! - подозреваю что надо копать в эту сторону...
У меня вообще в голове всё переворачивается, когда смотрю эти видеоуроки...
А как там потоки создаются - дык это вообще песня... этот материал вообще рассказывается для курса новичков !!!
А чо тогда профы делают - вообще АТАС !!!

Вообщем если у кого нибудь будут предложения по оптимизации алгоритма - то УРА, иначе пока что реальным выглядит только "железное решение"...

Времени не хватает... :-(

7

Re: OFF: Оптимизация алгоритма/метода расчёта

Вот ещё какой-то вариант появился...  надо порыть...

Времени не хватает... :-(

8

Re: OFF: Оптимизация алгоритма/метода расчёта

Евген, java по-моему компилируется в байт-код, а не в машинный, поэтому си и делфи будут шустрее работать.
Замерьте время выполнения запроса и остальных участков кода, хотя бы будет ясно что нужно оптимизировать.
Работа с целочисленным массивом в типизированном языке будет значительно быстрее, поскольку там это просто непрерывный участок памяти.

Евген пишет:

... этот материал вообще рассказывается для курса новичков !!!...

Странно, мне казалось, что проблемы бывают только при изучении первого языка .

alexii пишет:

Запросто . Могу и Celeron 266. И даже 8086 (именно что не 8088, а 8086).

Когда я родился, они уже вышли из употребления . Хочешь его на eBay через пару лет продать?

9

Re: OFF: Оптимизация алгоритма/метода расчёта

Зачем продавать, когда оно работает?

10 (изменено: Евген, 2012-01-23 09:56:15)

Re: OFF: Оптимизация алгоритма/метода расчёта

Коллеги !!!
Чувствую себя Колумбом, открывшим Америку (как говорит Xameleon)...
Вообщем есть такое только в Access, чудо инструкция в SQL запросе называется TRANSFORM !!!
SQL запрос приобретает следующий вид:

TRANSFORM Sum(kolvo) SELECT офис FROM ZAKAZ Where Period='январь 2012' and control=1 PIVOT rashodnik

можно ещё вот так, если заголовки столбцов нужны в определённом порядке

TRANSFORM Sum(kolvo) SELECT офис FROM ZAKAZ Where Period='январь 2012' and control=1 PIVOT rashodnik in ('Тонер OKI  4200','Тонер OKI  410','Тонер OKI  411')

здесь:
офис - встают заголовками строк в своде
rashodnik - заголовки столбцов

время расчёта ~ 1 сек !!!
Вопрос на лопатках !
Тема закрыта !

Времени не хватает... :-(