|
|
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
доброе время суток. циклы. в программах без них никуда. их бывает очень много. часто циклы связаны с массивами. но массивы бывают пустыми. стоит ли проверять на не пустоту массивы, прежде чем по ним бегать? Код: plaintext 1. 2. 3. проверять, то что проверять лучше (быстрее): количество элементов, истинность, другое? или глупости все это и компьютеры с компиляторами на сегодняшний день на столько клевые, что это экономия на спичках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 22:05:23 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
От языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:04:25 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
mayton, даже в случае Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:08:35 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Ваш код - безсмысленный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:10:44 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
maytonОт языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла. эээ... в C, C++, Pascal, Python, Ruby и Common Lisp для for (i = 1; i < 1; ++i) не выполняется ни разу. C# и Java проверить не могу. Вы о каких языках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:21:43 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
k0rvinmaytonОт языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла. эээ... в C, C++, Pascal, Python, Ruby и Common Lisp для for (i = 1; i < 1; ++i) не выполняется ни разу. C# и Java проверить не могу. Вы о каких языках? А почему вы меня ограничиваете? Я что, только константы умею использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:23:08 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
mayton, человек спрашивает, есть ли смысл писать (псевдокод) Код: plaintext 1. 2. 3. Код: plaintext 1. 2. Вы же говорите, что в тело цикла заход все равно хотя бы 1 раз, но будет. Что вы имеете в виду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:24:13 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Отвечая самому себе и ТС могу сказать следующее: иногда смысл точно есть. Например, некоторый класс может инкапсулировать доступ к базе данных и предоставлять интерфейс коллекции/массива. В таком классе метод проверки наличия хотя бы одного элемента (а-ля isEmpty) может быть реализован намного оптимальнее, нежели return this.length == 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:26:44 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
an0nymmayton,Что вы имеете в виду? Давай сейчас сидеть и вместе додумывать, что-же имел в виду создатель сабжа, написав: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:29:34 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
an0nym...некоторый класс может инкапсулировать доступ к базе данных и предоставлять интерфейс коллекции/массива... Слабо то же самое, но в трёх-четырёх словах, но по-русски. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:30:46 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
mayton А почему вы меня ограничиваете? Я что, только константы умею использовать? чем я Вас ограничиваю и почему только константы? for (i = a; i < b; ++i) для любого a >= b ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:33:03 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
ShSerge, ленивая выгрузка из базы данных с доступом как к массиву а-ля getRange(0, 100) -> SELECT ... LIMIT 0, 100 или getLength() -> SELECT COUNT(*) ... или isEmpty() -> SELECT 1 ... LIMIT 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:34:53 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
ShSergean0nym...некоторый класс может инкапсулировать доступ к базе данных и предоставлять интерфейс коллекции/массива... Слабо то же самое, но в трёх-четырёх словах, но по-русски. :) LINQ, короче. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:35:30 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Давайте дождёмся ответа автора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:36:24 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
maytonan0nymmayton,Что вы имеете в виду? Давай сейчас сидеть и вместе додумывать, что-же имел в виду создатель сабжа, написав: Код: plaintext 1. 2. 3. Додумывать нечего. Ибо очевидно, что. Могу написать дословно что он имел в виду. Код: plaintext 1. 2. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:36:52 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
an0nym меня правильно понял. на сколько минимально "сложным" должен (может) быть "интерфейс коллекции/массива", чтобы возникла необходимость реализации более оптимальной проверки? p.s. если я вас правильно понял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:38:36 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
2 anonym Если второй вариант (Perl ? или PHP ?) не вызывает ошибки, то почему-бы и нет. Пускай использует. Но если копнуть глубже, есть такой шаблон. Код: plaintext 1. 2. 3. 4. Попробуй подумать в чём его смысл. Может быть вопрос автора на поверхности кажется глупым, но он порождает массу других направлений и мыслей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2010, 23:48:28 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
mayton Код: plaintext 1. 2. 3. 4. А теперь объясните, пожалуйста, что значит этот код, конструкция co, переменная m, где определена n определена и скобки <>. Последний мой пример был на PHP, но подобный шаблон Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 00:02:20 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
i'm_novicean0nym меня правильно понял. на сколько минимально "сложным" должен (может) быть "интерфейс коллекции/массива", чтобы возникла необходимость реализации более оптимальной проверки? p.s. если я вас правильно понял... Если проверка isEmpty основана на getLength() (т. е. банально function isEmpty() { return this.getLength() == 0;}), то разницы от наличия доп. if практически нет. Если проверка isEmpty имеет не связанную с getLength() реализацию, затраты на исполнение getLength() могут быть несравнимо выше, чем isEmpty(). В таком случае if нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 00:05:05 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Первый оператор co - это аналог for, с той разницей что порождает параллельные процессы вместо итераций. Угловые скобочки - аналог критической секции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 00:10:56 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
maytonПервый оператор co - это аналог for, с той разницей что порождает параллельные процессы вместо итераций. Угловые скобочки - аналог критической секции. я, к сожалению, не понимаю вас. скажите, пожалуйста, какую массу направлений и мыслей порождает мой вопрос? на сколько глубоко это может завести? чем это грозит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 00:26:36 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Оценка стоимости операций. В параллельном программировании такой пустяк как блокирующее чтение-установка переменной является дорогостоящей операцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 00:29:30 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
maytonПервый оператор co - это аналог for, с той разницей что порождает параллельные процессы вместо итераций. Угловые скобочки - аналог критической секции. Если я правильно понял, то Код: plaintext 1. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 00:37:51 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
mayton, если я правильно понял, то вы говорите чисто о синтаксической стороне вопроса (что co [i=0 to -1] может быть рассмотрено как co [i=-1 to 0], что будет ошибкой - в 99% случаев программист этого не ждал), а я скорее о том, почему проверка на пустоту массива может быть намного рациональнее попытки пройтись по нему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 00:41:05 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Пример я взял из книги Грегори Эндрюса - Основы Многопоточного .... бла-бла и.т.д. Сранно. Я думал вы будете спрашивать о двойной проверке a[i]>m. Но всех почему-то заинтересовал пакетный запуск процессов. Чудеса!! Ладно. Всем - до завтра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 00:45:15 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
mayton, мне показалось это понятным - если не ошибаюсь, сначала быстро идет проверка non-thread safe, а если она прошла, то уже идёт дорогая thread-safe проверка и исполнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 00:54:05 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
an0nym... дорогая thread-safe проверка ... С блэкджэком и блокировкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 00:54:49 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
an0nymмне показалось это понятным - если не ошибаюсь, сначала быстро идет проверка non-thread safe, а если она прошла, то уже идёт дорогая thread-safe проверка и исполнение.А Вы не задумывались над таким простым вопросом: «если проверка non-thread safe может возвращать реальные результаты, зачем нужна thread-safe проверка»? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 02:34:59 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Ёш, потому что проверка массива и последующее действие над ним - не атомарно. После входа в критическую секцию и соответствующей блокировки - атомарно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 02:41:19 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
an0nymЁш, потому что проверка массива и последующее действие над ним - не атомарно. После входа в критическую секцию и соответствующей блокировки - атомарно.«Потому что потому» — это круто :) «потому что проверка массива и последующее действие над ним - не атомарно» — я Вам про это и пишу, как Вы можете проверить «non-thread safe» это состояние? Это невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 02:56:16 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Ёш, ну объясните тогда нам, как надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 03:22:08 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Ёшя Вам про это и пишу, как Вы можете проверить «non-thread safe» это состояние? Это невозможно. А я и не собираюсь без блокировки его проверять. Без блокировки только проверяется нужно ли проверять тщательно или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 03:25:14 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
an0nymЁш, ну объясните тогда нам, как надо?Я не знаю, я у Вас и спрашиваю — как Вы предлагаете одновременно для одних и тех же данных делать non-thread safe и thread safe проверку? :) ps: ладно замнём, мне всё равно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 03:27:45 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
an0nymА я и не собираюсь без блокировки его проверять. Без блокировки только проверяется нужно ли проверять тщательно или нет.Как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 03:28:21 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Ёшan0nymА я и не собираюсь без блокировки его проверять. Без блокировки только проверяется нужно ли проверять тщательно или нет.Как? Так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 03:30:24 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
an0nymЁшan0nymА я и не собираюсь без блокировки его проверять. Без блокировки только проверяется нужно ли проверять тщательно или нет.Как? Так.ок :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 03:31:10 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Ёшan0nymЁш, ну объясните тогда нам, как надо?Я не знаю, я у Вас и спрашиваю — как Вы предлагаете одновременно для одних и тех же данных делать non-thread safe и thread safe проверку? :) ps: ладно замнём, мне всё равно :) Еж, давай я тебе расскажу одну штуку, о которой ты наверное невкурсе. Есть такая структура данных. Называется Фильтр Блума. По сути это хеш-таблица, которая хранит булевые значения. Она имеет фиксированный размер но способна хранить универсальное множество (универсум) всех ключей. Здесь - подвох скажешь ты. Да. Подвох. Фильтр Блума выдает нечёткий результат. Правильнее сказать для некоторых проверок он выдаёт ложные срабатывания. Т.е ключ есть с вероятностью 99.5 % к примеру. И чем больше ключей в фильтре - тем больше ложных срабатываний. Единственное что он говорит точно - то что такой ключ в множестве отсутствует. Несмотря на эту особенность фильтр Блума (я-бы назвал его хешем Блума) используется в прокси-серверах для ПРЕДВАРИТЕЛЬНОЙ проверки URL на наличие в реальном кеше. Всё благодаря его скорости работы. Вот тебе полезный эффект от ПРЕДВАРИТЕЛЬНОЙ проверки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 11:13:47 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
mayton, в итоге я был близко к истине или нет? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 11:25:45 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
an0nymсначала быстро идет проверка non-thread safe, а если она прошла, то уже идёт дорогая thread-safe проверка и исполнение. Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 11:35:39 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
maytonЕж, давай я тебе расскажу одну штуку, о которой ты наверное невкурсе. Есть такая структура данных. Называется Фильтр Блума. По сути это хеш-таблица, которая хранит булевые значения. Она имеет фиксированный размер но способна хранить универсальное множество (универсум) всех ключей. Здесь - подвох скажешь ты. Да. Подвох. Фильтр Блума выдает нечёткий результат. Правильнее сказать для некоторых проверок он выдаёт ложные срабатывания. Т.е ключ есть с вероятностью 99.5 % к примеру. И чем больше ключей в фильтре - тем больше ложных срабатываний. Единственное что он говорит точно - то что такой ключ в множестве отсутствует. Несмотря на эту особенность фильтр Блума (я-бы назвал его хешем Блума) используется в прокси-серверах для ПРЕДВАРИТЕЛЬНОЙ проверки URL на наличие в реальном кеше. Всё благодаря его скорости работы. Вот тебе полезный эффект от ПРЕДВАРИТЕЛЬНОЙ проверки. Спасибо за упоминание фильтра Блума, погуглил, почитал - очень интересная вещь. А где подобные вещи описаны? Кого читать для просвещения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 15:04:43 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
Увы, не знаю. Я о фильтре Блума прочитал чисто случайно, когда искал обзорные статьи о squid (если мне не изменяет память). Дальше - wiki и т.д. кликаем по ссылкам. В фундаментальной литературе по алгоритмам и (Кнут, Вирт и прочие) СД я к сожалению упоминания об этой структуре данных не находил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 15:17:24 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
maytonВот тебе полезный эффект от ПРЕДВАРИТЕЛЬНОЙ проверки.Фильтр Блума non-thread safe? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 15:36:10 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
maytonОт языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла. Это с чего-бы ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 15:41:10 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
ЁшmaytonВот тебе полезный эффект от ПРЕДВАРИТЕЛЬНОЙ проверки.Фильтр Блума non-thread safe? Забудь про thread-safe. Я хотел привести пример вероятностной оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2010, 15:48:29 |
|
||
|
"а был ли мальчик?"
|
|||
|---|---|---|---|
|
#18+
mayton wrote: > От языка зависит. Но для большинства императивных заход в выражение > for(..) выполняется всегда хотя-бы 1 раз независимо от результата > предиката цикла. Я наверное понял, что ты имел в виду. Что выражения в цикле выполняются хотя бы один раз. for( int i = array.get_size(); i < array.size(); ++i ) { process_element( array[i] ); } int i = array.get_size(); и i < array.size(); будут выполняться как правило хотя бы один раз в большинстве языков программирования. Это вполне правильное утверждение. Но process_element( array[i] ); в большинстве языков программирования МОЖЕТ НЕ ВЫПОЛНИТСЯ НИ РАЗУ, потому что в большинстве языков большинство циклов являются циклами с предусловиями. (в C/C++ while, for -- с предусловиями, do ... while -- с постусловиями). Поскольку в 90% случаев кода пробега по массивам условие выхода из цикла должно проверять наличие текущего элемента в массиве тем или иным образом (в смысле -- не кончился ли ещё массив), то я лично считаю, что в циклас с предусловиями НЕ НАДО проверять массив на пустоту, прежде чем по нему бежать. В циклах с постусловием -- надо. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2010, 19:11:34 |
|
||
|
|

start [/forum/search_topic.php?author=Alermo&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 648ms |
| total: | 806ms |

| 0 / 0 |
