Помогите с оптимизацией

  • Автор темы YesNo
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Y

YesNo

Здравствуйте!
Проблема такова - есть программа, рассчитывающая, сколько штук коробок некоторых размеров войдет в некоторый контейнер, причем предпочтение отдается сначала тяжелым, потом большим коробкам и т.д. (коробки могут быть нескольких видов, с указанием количества)
Алгоритм здесь моего сочинения, он итерационный (циклы и условия), вот только при больших размерах коробок\контейнера он … мягко говоря «виснет»…
В связи с необходимостью графического построения схемы расположения коробок, я использую несколько форм и, как результат, глобальные переменные. Все ничего, да пара-тройка глобальных объектов типа массив некоторого класса, не особо добавляют скорости вычислений; к тому же весь алгоритм строиться на обработке булевого массива, описывающего содержимое контейнера по сантиметрам (занят\свободен). Так как размеры этого массива доходят до 1300 на 300 , то в результате обработки выполняется около 390000 операций.
Беда в том, что в моей реализации алгоритма ничего нельзя выделить в отдельный поток\потоки, все операции зависят от предыдущих и влияют на последующие…
Вот такой кошмар.
Я прошу вашей помощи – может кто посоветует, как увеличить скорость работы всей этой радости?
Хотелось бы попробовать ускорить работу с памятью, но эта тема мне незнакома. Подкиньте линков по работе с памятью в Дельфи на худой конец.
Заранее спасибо. (прога в аттаче)
 

Вложения

  • Packer.rar
    188,7 КБ · Просмотры: 253
  • Packer.rar
    188,7 КБ · Просмотры: 248
B

Barmutik

Мда .. код конечно я не смотрел .. но скажу сразу ..

Это стандартная задача раскроя\упаковки в 3-х мерном пространстве... Для решения её в частном(!!!!) случае существует много алгоритмов ... люди по этой теме диссертации пишут ...

Так что Вы можете реализовать только вероятностный алгоритм который будет выполнять приблизительно оптимальную упаковку Ваших коробок ...

Для ускорения скорости используйте не массивы а более быстрые структуры .. ну к примеру деревья ... также можете воспользоватся другим менеджером памяти ... к примеру в нащих проектах после замены стандратного борляндовского менеджера памяти на FastMM скорость выросла на 30%...

Так же к примеру если проект компилять Delphi 7 то он будет работать на 15% быстрее с операция по памяти чем если Delphi 7 Update Pack 1

Правда в Вашем случае когда построение идёт перебором, эти способы врядли помогут .. нужно координально менять алгоритм ... потому как с увеличением количество коробок время рассчёта растёт по экспоненте .. а значит шансов закончить работу в общем случае у программы нет ...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!