Динамические массивы в семерке.

Опубликовал Александр Рытов (Арчибальд) в раздел Программирование - Практика программирования

Работаем с массивами вычисляемой длины - создаем, пишем, читаем, уничтожаем.

Разработчики семерочной платформы совершенно не ориентировались на вычислительные задачи, что, впрочем, вполне понятно. Но иногда вычисления с большим объемом данных все-таки встречаются - тому пример недавние дискуссии на Инфостарте по обходу графов. Мне при решении этой задачи существенно недоставало возможностей работы с массивами заранее неизвестной длины, а заводить массивы "с запасом" - религия не позволяет.

К счастью, у нас имеет свободное хождение FormEx, вполне позволяющий создать массив нужной длины, поработать с ним и благополучно уничтожить. Остается только обойти синтакс-контроль, который изначально статичен.

Пяток текстов нужных процедур/функций - на скрине. Тестовая обработочка с набором этих процедур прилагается. 

Скачать файлы

Наименование Файл Версия Размер
ДинМас.ert
.ert 28,00Kb
13.12.10
62
.ert 28,00Kb 62 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Александр Шишкин (Шёпот теней) 1675 13.12.10 11:41 Сейчас в теме

все люди делятся на две категории:

1. ищут способ
2. ищут причину

... хороший программист всегда ВЫШЕ любой платформы ... вот ...
2. Андрей Кайгородов (mszsuz) 64 13.12.10 11:48 Сейчас в теме
И такая обработка массива работает быстрее, чем ТЗ?
мама миа; +1 Ответить
3. Ёпрст Биомать, а? Верните бесплатный доступ к файлам! (Ёпрст) 1010 13.12.10 12:02 Сейчас в теме
Посмотрел бы лучше класс Вектор и АссоциативныйВектор 1с++
всё быстрее.
4. Игорь Исхаков (Ish_2) 954 13.12.10 13:00 Сейчас в теме
Арчибальд, любой вопрос можно решить так , а можно и эдак.
Что толку , что ты показал, что Formex можно использовать ? И что с того ?
Где сравнительный анализ ?
Без него читателю ничего не остается, как почесать в затылке : "Арчибальд - это голова...".
5. Александр Рытов (Арчибальд) 2651 13.12.10 13:44 Сейчас в теме
(3) Слишком много сразу...
(4) Ну и не не клади палец в рот...
6. Артур Аюханов (artbear) 838 14.12.10 16:09 Сейчас в теме
(5) Ага, лучше бы сразу показал на Векторе или Ассоциативном векторе из 1С++
Можешь проверить скорости - 1С++ сильно выигрывает, да и сервисных возможностей побольше - тех же быстрых выгрузок/загрузок из штатных объектов типа ТЗ, СЗ, документов и прочая.
7. Игорь Исхаков (Ish_2) 954 14.12.10 18:32 Сейчас в теме
(5) И правда , попробуй (6) в своей обработке графа.
Прогноз : не спасет .
Но выигрыш в 1.5 - 2 раза , думаю , вполне реален.
8. Александр Рытов (Арчибальд) 2651 16.12.10 08:36 Сейчас в теме
(6)(7) Что-то я попробовал 1С++ поставить - глюки пошли. Держу пока в заначке, разбираться руки не доходят.
9. vip (vip) 16.12.10 09:00 Сейчас в теме
(8) А какие именно глюки пошли?
И какой релиз 1С++ у тебя?
Не держи в заначке. Я вообще давно уже не представляю работу без 1С++.
10. Артур Аюханов (artbear) 838 16.12.10 09:09 Сейчас в теме
(8) Да, версию 1С++ покажи. Лучше юзать последнюю из версии 3.Х.Х
и порядок загрузки всех ВК.
1С++ должна грузиться самой первой из ВК - правило верно почти в 99% случаях.
11. Александр Рытов (Арчибальд) 2651 16.12.10 10:11 Сейчас в теме
(9) Да я понимаю, что надо разобраться и начать применять. Текучка заедает.
12. vip (vip) 16.12.10 10:40 Сейчас в теме
(11) Разбирайся.
И сразу текучки меньше станет :)
13. Александр Рытов (Арчибальд) 2651 16.12.10 10:47 Сейчас в теме
(12) Не, на текучку это не повлияет. Разве что к какому новому проекту... которого не предвидится.
Но разбираться буду.
14. Александр Рытов (Арчибальд) 2651 17.12.10 09:04 Сейчас в теме
15. Артур Аюханов (artbear) 838 17.12.10 10:00 Сейчас в теме
(14) Последние релизы 1С++ можно взять на странице
http://www.1cpp.ru/index.php/File:Icpp-latest.rar
Внимание - это не архив, а именно страница :)
и там можно скачать любой релиз 1С++ З.Х.Х, и уточнить историю изменений.
16. Игорь Исхаков (Ish_2) 954 17.12.10 10:08 Сейчас в теме
(14) Давай , Арчибальд, буду ждать.
Чем черт не шутит ?
А вдруг твою обработку графа и вравду спасет 1с++ ?
17. Александр Рытов (Арчибальд) 2651 17.12.10 10:36 Сейчас в теме
(15) Спасибо. А что, FormEx перестал быть встроенным?
18. Александр Рытов (Арчибальд) 2651 17.12.10 10:51 Сейчас в теме
(16) Не дерзи :D . Вспомни, что на стотысячном дереве без повторений моя обработка твоей не уступает даже без всяких серверов, на миллионнике с повторениями работает на порядок быстрее, чем у тебя, а на миллиарднике - похоже, на три порядка. Чью обработку тут спасать-то?
19. Игорь Исхаков (Ish_2) 954 17.12.10 11:29 Сейчас в теме
(18)Уважаю дерзких . Но твоя дерзость не знает границ .
Я тебе талдычу одно и тоже : всё дело в постановке задачи.

1.Если ты предлагаешь "пулялку" по тестам , где столько нереальных повторений узлов ,
сколько НИКОГДА не встретится в реальных задачах - то твой алгоритм оч.оч. хорош. Признаю.

2. Если ты предлагаешь технологичное решение для пользователя , то
- обработка НЕ ДОЛЖНА зависеть от повторений узлов и быть в среднем оптимальной .
Что толку что твоя обработка показала на выдуманном тесте 0 сек ? - Если в реальном нагрузочном тесте она "рухнула"- 10 мин (!!). Какой в ней прок пользователю ?

- обработка в случае зацикливания графа должна ЯСНО, ПОНЯТНО, ОДНОЗНАЧНО для пользователя отобразить это зацикливание для последующего исправления. Если этого нет , то для практического использования обработка непригодна. Ты , что ? Пользователю который будет тыкаться -искать ошибку после твоих сообщений "..ПОЗ00001", скажешь :
"Зато моя обработка "пуляет" по тесту №1 за 0 сек !"
20. Александр Рытов (Арчибальд) 2651 17.12.10 12:06 Сейчас в теме
(19)
всё дело в постановке задачи

Была поставлена задача разузлования. Эту задачу я и решил. На РЕАЛЬНЫХ комплектациях (а спецификаций с миллионом различных позиций не бывает, это за гранью реальности) она решается на порядок быстрее, чем у тебя.
обработка НЕ ДОЛЖНА зависеть от повторений узлов и быть в среднем оптимальной
Перефразируем для понятности. На твой взгляд, во-первых, обработка должна игнорировать РЕАЛЬНУЮ ситуацию повторения узлов, а во-вторых, среднеоптимальным является прямой перебор дуг. И то и другое - ни в какие ворота...
обработка в случае зацикливания графа должна ЯСНО, ПОНЯТНО, ОДНОЗНАЧНО для пользователя отобразить это зацикливание для последующего исправления.
Ну, давай глянем. В графе с одной ошибочной дугой ты находишь 10 000 ошибочных веток, сообщаешь пользователю о 100 из них - и что? Это ясное, понятное и наглядное представление?
Ты решил не ту задачу. Твоя обработка рисует дерево. И все. А вот с разузлованием - тухляк...
ildarovich; +1 Ответить 1
21. Игорь Исхаков (Ish_2) 954 17.12.10 12:24 Сейчас в теме
(20) Представь своё технологичное решение .
Надеюсь , ты понимаешь , что предыдущее твоё решение "Граф(ин).." на технологичность совсем не тянет.
На 77, на 8, на 1с++. Да хоть на чём !!!
Тогда поговорим.
Сейчас всё впустую.
22. Александр Рытов (Арчибальд) 2651 17.12.10 16:10 Сейчас в теме
(3)(6) Ассоциативный вектор пока не нашел. На Векторе: запись вдвое быстрее, чем в СписокЗначений, чтение примерно одинаковое. Но съедает больше памяти.
Мои массивы раза в четыре-шесть медленнее работают. Но памяти вдвое меньше съедают.
23. Артур Аюханов (artbear) 838 18.12.10 13:41 Сейчас в теме
(22) А чего его искать? онлайн-дока http://www.1cpp.ru/docum/icpp/html/
например, в данном случае смотри файл extobjs.html
Прямая ссылка
http://www.1cpp.ru/docum/icpp/html/extobjs.html#id119
24. Freespy (freespy) 01.09.11 04:53 Сейчас в теме
бл9, вы бы лучше обсудили, что в теме нет описания, как определить количество элементов в массиве!
25. Александр Рытов (Арчибальд) 2651 01.09.11 08:36 Сейчас в теме
(24) В теме еще не описано, как определить тип переменной. И много чего другого не описано, к теме не относящегося.
26. Сергей Рудаков (fishca) 1026 01.09.11 08:42 Сейчас в теме
(22)
Мои массивы раза в четыре-шесть медленнее работают. Но памяти вдвое меньше съедают.

И чем ты гордишься ;) ?
Сейчас проблемы нарастить память как раз нет, а вот увеличить производительность процессора в большинстве случаев не получается.
27. Александр Рытов (Арчибальд) 2651 01.09.11 09:03 Сейчас в теме
(26) Гордость тут ни при чем, это просто замечание по эксперименту. Тема появилась в связи с дискуссией "Как не попасть на миллион", и там дело упиралось в объем выделяемой задаче памяти - не физической, а системной. Суммарное время работы (обработка+ожидание памяти) сильно зависит от того, что еще крутится на копмпе.
А вообще-то публикация больше показательная, чем практическая.