gifts2017

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

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

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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

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

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

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

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

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

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

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

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

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