![]() |
contains vs. parent
oParent - это DisplayObjectContainer
oChild - это DisplayObject Что если вместо oParent.contains(oChild) использовать oChild.parent == oParent? По моему должно быстрее работать или нет? |
Код AS3:
|
Цитата:
скорее всего в методе contains идет цикл по всем содержащимся объектам, и если объект найден возвращается true. oChild.parent == oParent - это обычное сравнение |
contains рекурсивный.
|
Цитата:
Но так и не понял почему contains быстрее? Если он рекурсивный то он вообще должен быть очень медленным по сравнению oChild.parent == oParent |
Он нативный потому что.
|
Все ясно, спасибо)
|
а если там сто тыщ миллионов объектов вложеных. он тоже быстрее будет? просто если он рекурсивный, значит зависимость логарифмическая, а у parent - линейная. значит при определенных условиях он обгонит contains.
хотя, это я так, мысли вслух. |
Пора закончить спор.
mc2 находится в mc, изменение количества вложенных обьектов на результат практически не влияет. Код AS3:
|
а никто не догадался, что contains писали не идиоты, и что там скорее всего точно такой же линейный алгоритм? по крайней мере, когда я писал дерево данных, у меня даже в мозгу ничего не передёрнулось, что бы сделать по другому.
|
прошу прощения описался. не линейная, а константная (линейная на самом деле еще хуже логарифмической)
|
Вы уверены, что понимаете как работает contains? мне кажется, что код с поразительной точностью выглядит так ( только написан на Си ):
Код AS3:
|
но как говорит товарищ etc
Цитата:
UPD: но он же ходит и по всем детишкам наверно? |
Felicast, внимательно изучите мой код. он рекурсивно проверяет.
|
Цитата:
Рекурсия - вещь в общем случае затратная (происходит дополнительный вызов функции), так что лучше по возможности ее не использовать. Для этого примеряют циклы, что и сделано в представленном коде. |
Рекурсия подразумевалась в том, что проверяется наличие ребенка в дочерних клипах, а не вызов всё того же contains у детей.
|
incoob, как ни странно, но википедия и со мной согласна
|
BlooDHounD, я не совсем понял, в чем с вами согласна википедия.
Вроде рекуррентные последовательности тут совсем не причем... Все же вы используете не рекурсивные вызовы, а выполняете вычисления в цикле С использованием рекурсии ваш код на AS3 выглядел бы примерно так: Код AS3:
|
так. совсем поплыли.
итератор тут не причём. итераторов тут не используется. у меня последовательные вычисления одной сущности на основании другой. а Вы в терминах ну очень плаваете. рекурсии - они разные, и по разному выражаются. нельзя утверждать, что термин имеет одно и тоже определение во всех областях. |
Ого, оказывается циклы - это не пример итерации!:eek:
Сильно сказано. Что же тогда у нас будет итерацией и чем оно отличается от рекурсии в вашем понимании? Скажите, в чем я не прав: 1) рекурсия 2) итерация - повторения ряда действий, использующих результаты предыдущей аналогичной операции 3) цикл - набор итераций 4) |
мдя ... я же говорил: каша.
а ещё "рекурсией" в программировании, называют ряд вещей: 1. ошибка 2. перебор деревьев 3. порождающие друг друга конструкции и ещё целая куча вещей, которые я не успел вспомнить за 40 секунд. с итераторами вообще отдельная тема. итерататорм является объект, который умеет перебирать элементы коллекций. иногда это делают в цикле, иногда рекурсивно, иногда по таймеру. простейший пример итераторов и это число. простейший пример итерации это i++. но никак не цикл. и не перебирал я коллекцию. я порождал новой объект на основании старого. просто в цикле. p.s.: посетите первый курс университета. |
Помоему, вы путаете итераторы и итерации. Заметьте, я про итераторы ничего не говорил. И то, что итератор - это объект, а не действие, никто не оспаривает.
Вы сами пробовали почитать текст по ссылкам, что приводились выше? "В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная рекурсия)"© wikipedia.org "Итерация - это организация обработки данных, при которой действия повторяются многократно, не приводя при этом к вызовам самих себя." © wikipedia.org "Последовательность инструкций, предназначенная для многократного исполнения, называется телом цикла. Однократное выполнение тела цикла называется итерацией." © wikipedia.org Надеюсь вы не будете отрицать, что while - это цикл и нигде не производится явных или неявных вызовов вашего метода (contains)? Итак, вы утверждаете, что производите последовательные вычисления одной сущности на основании другой, а именно Код AS3:
Код AS3:
Код AS3:
Код AS3:
Код AS3:
Код AS3:
Код AS3:
Код AS3:
Итак, повторю, что уже давно говорил: в приведенном вами коде рекурсий нет. PS расскажите пожалуйста об ошибках-рекурсиях, никогда о таком не слышал. Очень интересно. Вы мне, к стати, ни на один из заданных вопросов не ответили, а только обвиняли в безграмотности. PPS в принципе понятно, что под рекурсией подразумевал etc: последовательно опускаемся по дереву объектов. Но формально это рекурсией не является. Пример рекурсивного кода я уже писал. |
мдя ... не понятно почему Вы говорите о тёплом, когда я говорю об мягком?
ждёте ответов? Цитата:
Цитата:
Цитата:
Цитата:
p.s.: ошибка "рекурсия" - это исключение ( во АС3 StackOverflowError, кажется ), которое возникает, в процессе переполнения стека программы за счёт (не)явного вызова метода самого себя или типа того. грубо говоря "бесконечная рекурсия", как бывает бесконечный цикл, который в АС3 приводит к ScriptTimeoutError. |
| Часовой пояс GMT +4, время: 17:48. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.