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

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

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

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

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

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

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

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

См. также

Комментарии
1. Александр Шишкин (Шёпот теней) 1685 13.12.10 11:41 Сейчас в теме

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

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

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

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

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

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

Была поставлена задача разузлования. Эту задачу я и решил. На РЕАЛЬНЫХ комплектациях (а спецификаций с миллионом различных позиций не бывает, это за гранью реальности) она решается на порядок быстрее, чем у тебя.
обработка НЕ ДОЛЖНА зависеть от повторений узлов и быть в среднем оптимальной
Перефразируем для понятности. На твой взгляд, во-первых, обработка должна игнорировать РЕАЛЬНУЮ ситуацию повторения узлов, а во-вторых, среднеоптимальным является прямой перебор дуг. И то и другое - ни в какие ворота...
обработка в случае зацикливания графа должна ЯСНО, ПОНЯТНО, ОДНОЗНАЧНО для пользователя отобразить это зацикливание для последующего исправления.
Ну, давай глянем. В графе с одной ошибочной дугой ты находишь 10 000 ошибочных веток, сообщаешь пользователю о 100 из них - и что? Это ясное, понятное и наглядное представление?
Ты решил не ту задачу. Твоя обработка рисует дерево. И все. А вот с разузлованием - тухляк...
ildarovich; +1 Ответить 1
21. Игорь Исхаков (Ish_2) 961 17.12.10 12:24 Сейчас в теме
(20) Представь своё технологичное решение .
Надеюсь , ты понимаешь , что предыдущее твоё решение "Граф(ин).." на технологичность совсем не тянет.
На 77, на 8, на 1с++. Да хоть на чём !!!
Тогда поговорим.
Сейчас всё впустую.
22. Александр Рытов (Арчибальд) 2652 17.12.10 16:10 Сейчас в теме
(3)(6) Ассоциативный вектор пока не нашел. На Векторе: запись вдвое быстрее, чем в СписокЗначений, чтение примерно одинаковое. Но съедает больше памяти.
Мои массивы раза в четыре-шесть медленнее работают. Но памяти вдвое меньше съедают.
23. Артур Аюханов (artbear) 856 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. Александр Рытов (Арчибальд) 2652 01.09.11 08:36 Сейчас в теме
(24) В теме еще не описано, как определить тип переменной. И много чего другого не описано, к теме не относящегося.
26. Сергей Рудаков (fishca) 1044 01.09.11 08:42 Сейчас в теме
(22)
Мои массивы раза в четыре-шесть медленнее работают. Но памяти вдвое меньше съедают.

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