powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / "а был ли мальчик?"
47 сообщений из 47, показаны все 2 страниц
"а был ли мальчик?"
    #36792087
i'm_novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
доброе время суток.

циклы. в программах без них никуда. их бывает очень много. часто циклы связаны с массивами.
но массивы бывают пустыми. стоит ли проверять на не пустоту массивы, прежде чем по ним бегать?
Код: plaintext
1.
2.
3.
if (есть_чо_в_массиве) {
  цикл_по_массиву
}
что и на сколько тяжелее компиляторам: условие или заход в пустой массив? если есть смысл
проверять, то что проверять лучше (быстрее): количество элементов, истинность, другое?

или глупости все это и компьютеры с компиляторами на сегодняшний день на столько клевые, что
это экономия на спичках?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792106
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792109
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

даже в случае
Код: plaintext
for (; 1 == 0 ;)
?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792111
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш код - безсмысленный.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792117
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОт языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла.
эээ... в C, C++, Pascal, Python, Ruby и Common Lisp для for (i = 1; i < 1; ++i) не выполняется ни разу. C# и Java проверить не могу.
Вы о каких языках?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792118
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k0rvinmaytonОт языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла.
эээ... в C, C++, Pascal, Python, Ruby и Common Lisp для for (i = 1; i < 1; ++i) не выполняется ни разу. C# и Java проверить не могу.
Вы о каких языках?
А почему вы меня ограничиваете? Я что, только константы умею использовать?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792119
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

человек спрашивает, есть ли смысл писать (псевдокод)
Код: plaintext
1.
2.
3.
arr = [];
if (!arr.isEmpty) 
  for (i =  0 , n = arr.length; i < n; ++i) 
    // do smth
или можно сразу
Код: plaintext
1.
2.
arr = [];
for (i =  0 , n = arr.length; i < n; ++i) 
  // do smth
, потому как очевидно, что 0 < arr.length будет исполнено как 0 < 0 = false и соответственно выполнено тело цикла ни разу не будет. 0 == 1 - это из той же оперы, что и 0 < 0.

Вы же говорите, что в тело цикла заход все равно хотя бы 1 раз, но будет.

Что вы имеете в виду?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792121
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвечая самому себе и ТС могу сказать следующее: иногда смысл точно есть. Например, некоторый класс может инкапсулировать доступ к базе данных и предоставлять интерфейс коллекции/массива. В таком классе метод проверки наличия хотя бы одного элемента (а-ля isEmpty) может быть реализован намного оптимальнее, нежели return this.length == 0.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792124
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymmayton,Что вы имеете в виду?
Давай сейчас сидеть и вместе додумывать, что-же имел в виду создатель сабжа, написав:
Код: plaintext
1.
2.
3.
if (есть_чо_в_массиве) {
  цикл_по_массиву
}
?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792125
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nym...некоторый класс может инкапсулировать доступ к базе данных и предоставлять интерфейс коллекции/массива...
Слабо то же самое, но в трёх-четырёх словах, но по-русски. :)
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792127
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А почему вы меня ограничиваете? Я что, только константы умею использовать?
чем я Вас ограничиваю и почему только константы? for (i = a; i < b; ++i) для любого a >= b
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792129
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,

ленивая выгрузка из базы данных с доступом как к массиву а-ля getRange(0, 100) -> SELECT ... LIMIT 0, 100 или getLength() -> SELECT COUNT(*) ... или isEmpty() -> SELECT 1 ... LIMIT 1.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792130
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergean0nym...некоторый класс может инкапсулировать доступ к базе данных и предоставлять интерфейс коллекции/массива...
Слабо то же самое, но в трёх-четырёх словах, но по-русски. :)
LINQ, короче. :)
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792131
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте дождёмся ответа автора.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792132
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonan0nymmayton,Что вы имеете в виду?
Давай сейчас сидеть и вместе додумывать, что-же имел в виду создатель сабжа, написав:
Код: plaintext
1.
2.
3.
if (есть_чо_в_массиве) {
  цикл_по_массиву
}
?
Додумывать нечего. Ибо очевидно, что. Могу написать дословно что он имел в виду.

Код: plaintext
1.
2.
if ($array) 
  foreach ($array as $element) 
    // do smth
против
Код: plaintext
1.
foreach ($array as $element)
  // do smth
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792135
i'm_novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
an0nym меня правильно понял.

на сколько минимально "сложным" должен (может) быть "интерфейс коллекции/массива", чтобы
возникла необходимость реализации более оптимальной проверки?

p.s. если я вас правильно понял...
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792144
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 anonym

Если второй вариант (Perl ? или PHP ?) не вызывает ошибки, то почему-бы и нет. Пускай использует. Но если копнуть глубже, есть такой шаблон.

Код: plaintext
1.
2.
3.
4.
int m= 0 ;
co [i= 0  to n- 1 ]
 if  (a[i] > m)
   <if (a[i] > m) m=a[i];>


Попробуй подумать в чём его смысл. Может быть вопрос автора на поверхности
кажется глупым, но он порождает массу других направлений и мыслей.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792150
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: plaintext
1.
2.
3.
4.
int m= 0 ;
co [i= 0  to n- 1 ]
 if  (a[i] > m)
   <if (a[i] > m) m=a[i];>

А теперь объясните, пожалуйста, что значит этот код, конструкция co, переменная m, где определена n определена и скобки <>.

Последний мой пример был на PHP, но подобный шаблон
Код: plaintext
1.
2.
if (array.isEmpty()) {
  foreach (array as element) 
    // do smth
встречается в большинстве ОО ЯП - от того что в некоторых ЯП метод isEmpty имеет другое название и foreach записывается как foreach (Type element in array) мой код понятности не теряет.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792154
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i'm_novicean0nym меня правильно понял.

на сколько минимально "сложным" должен (может) быть "интерфейс коллекции/массива", чтобы
возникла необходимость реализации более оптимальной проверки?

p.s. если я вас правильно понял...
Если проверка isEmpty основана на getLength() (т. е. банально function isEmpty() { return this.getLength() == 0;}), то разницы от наличия доп. if практически нет. Если проверка isEmpty имеет не связанную с getLength() реализацию, затраты на исполнение getLength() могут быть несравнимо выше, чем isEmpty(). В таком случае if нужен.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792160
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый оператор co - это аналог for, с той разницей что порождает параллельные процессы вместо итераций. Угловые скобочки - аналог критической секции.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792172
i'm_novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonПервый оператор co - это аналог for, с той разницей что порождает параллельные процессы вместо итераций. Угловые скобочки - аналог критической секции.

я, к сожалению, не понимаю вас. скажите, пожалуйста, какую массу направлений и мыслей
порождает мой вопрос? на сколько глубоко это может завести? чем это грозит?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792174
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оценка стоимости операций. В параллельном программировании такой пустяк как блокирующее чтение-установка переменной является дорогостоящей операцией.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792175
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПервый оператор co - это аналог for, с той разницей что порождает параллельные процессы вместо итераций. Угловые скобочки - аналог критической секции.
Если я правильно понял, то
Код: plaintext
1.
co [i= 0  to  9 ]
 i * i;
породит 10 процессов, каждый из которых посчитает квадрат соответствующего ему i. Возникает вопрос - неужели будет overhead в случае
Код: plaintext
co [i= 0  to - 1 ]
? (Я подразумеваю, что to обозначает восходящий интервал и 0 to -1 выльется в пустой интервал.)
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792179
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

если я правильно понял, то вы говорите чисто о синтаксической стороне вопроса (что co [i=0 to -1] может быть рассмотрено как co [i=-1 to 0], что будет ошибкой - в 99% случаев программист этого не ждал), а я скорее о том, почему проверка на пустоту массива может быть намного рациональнее попытки пройтись по нему.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792183
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример я взял из книги Грегори Эндрюса - Основы Многопоточного .... бла-бла и.т.д.

Сранно. Я думал вы будете спрашивать о двойной проверке a[i]>m. Но всех почему-то заинтересовал пакетный запуск процессов.

Чудеса!!

Ладно. Всем - до завтра.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792185
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

мне показалось это понятным - если не ошибаюсь, сначала быстро идет проверка non-thread safe, а если она прошла, то уже идёт дорогая thread-safe проверка и исполнение.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792186
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nym... дорогая thread-safe проверка ...
С блэкджэком и блокировкой.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792220
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymмне показалось это понятным - если не ошибаюсь, сначала быстро идет проверка non-thread safe, а если она прошла, то уже идёт дорогая thread-safe проверка и исполнение.А Вы не задумывались над таким простым вопросом: «если проверка non-thread safe может возвращать реальные результаты, зачем нужна thread-safe проверка»?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792221
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёш,

потому что проверка массива и последующее действие над ним - не атомарно. После входа в критическую секцию и соответствующей блокировки - атомарно.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792224
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymЁш,

потому что проверка массива и последующее действие над ним - не атомарно. После входа в критическую секцию и соответствующей блокировки - атомарно.«Потому что потому» — это круто :)

«потому что проверка массива и последующее действие над ним - не атомарно» — я Вам про это и пишу, как Вы можете проверить «non-thread safe» это состояние? Это невозможно.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792232
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёш,

ну объясните тогда нам, как надо?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792233
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёшя Вам про это и пишу, как Вы можете проверить «non-thread safe» это состояние? Это невозможно.
А я и не собираюсь без блокировки его проверять. Без блокировки только проверяется нужно ли проверять тщательно или нет.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792234
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymЁш,

ну объясните тогда нам, как надо?Я не знаю, я у Вас и спрашиваю — как Вы предлагаете одновременно для одних и тех же данных делать non-thread safe и thread safe проверку? :)

ps: ладно замнём, мне всё равно :)
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792235
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymА я и не собираюсь без блокировки его проверять. Без блокировки только проверяется нужно ли проверять тщательно или нет.Как?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792236
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёшan0nymА я и не собираюсь без блокировки его проверять. Без блокировки только проверяется нужно ли проверять тщательно или нет.Как?
Так.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792238
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymЁшan0nymА я и не собираюсь без блокировки его проверять. Без блокировки только проверяется нужно ли проверять тщательно или нет.Как?
Так.ок :)
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792277
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёшan0nymЁш,

ну объясните тогда нам, как надо?Я не знаю, я у Вас и спрашиваю — как Вы предлагаете одновременно для одних и тех же данных делать non-thread safe и thread safe проверку? :)

ps: ладно замнём, мне всё равно :)
Еж, давай я тебе расскажу одну штуку, о которой ты наверное невкурсе. Есть такая структура данных. Называется Фильтр Блума. По сути это хеш-таблица, которая хранит булевые значения. Она имеет фиксированный размер но способна хранить универсальное множество (универсум) всех ключей. Здесь - подвох скажешь ты. Да. Подвох. Фильтр Блума выдает нечёткий результат. Правильнее сказать для некоторых проверок он выдаёт ложные срабатывания. Т.е ключ есть с вероятностью 99.5 % к примеру. И чем больше ключей в фильтре - тем больше ложных срабатываний. Единственное что он говорит точно - то что такой ключ в множестве отсутствует. Несмотря на эту особенность фильтр Блума (я-бы назвал его хешем Блума) используется в прокси-серверах для ПРЕДВАРИТЕЛЬНОЙ проверки URL на наличие в реальном кеше. Всё благодаря его скорости работы.

Вот тебе полезный эффект от ПРЕДВАРИТЕЛЬНОЙ проверки.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792285
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

в итоге я был близко к истине или нет? :)
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792288
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymсначала быстро идет проверка non-thread safe, а если она прошла, то уже идёт дорогая thread-safe проверка и исполнение.
Да.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792445
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕж, давай я тебе расскажу одну штуку, о которой ты наверное невкурсе. Есть такая структура данных. Называется Фильтр Блума. По сути это хеш-таблица, которая хранит булевые значения. Она имеет фиксированный размер но способна хранить универсальное множество (универсум) всех ключей. Здесь - подвох скажешь ты. Да. Подвох. Фильтр Блума выдает нечёткий результат. Правильнее сказать для некоторых проверок он выдаёт ложные срабатывания. Т.е ключ есть с вероятностью 99.5 % к примеру. И чем больше ключей в фильтре - тем больше ложных срабатываний. Единственное что он говорит точно - то что такой ключ в множестве отсутствует. Несмотря на эту особенность фильтр Блума (я-бы назвал его хешем Блума) используется в прокси-серверах для ПРЕДВАРИТЕЛЬНОЙ проверки URL на наличие в реальном кеше. Всё благодаря его скорости работы.

Вот тебе полезный эффект от ПРЕДВАРИТЕЛЬНОЙ проверки.
Спасибо за упоминание фильтра Блума, погуглил, почитал - очень интересная вещь. А где подобные вещи описаны? Кого читать для просвещения?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792460
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увы, не знаю. Я о фильтре Блума прочитал чисто случайно, когда
искал обзорные статьи о squid (если мне не изменяет память).
Дальше - wiki и т.д. кликаем по ссылкам.
В фундаментальной литературе по алгоритмам и (Кнут, Вирт и прочие) СД
я к сожалению упоминания об этой структуре данных не находил.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792475
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВот тебе полезный эффект от ПРЕДВАРИТЕЛЬНОЙ проверки.Фильтр Блума non-thread safe?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792481
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОт языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла.

Это с чего-бы ???
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792488
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЁшmaytonВот тебе полезный эффект от ПРЕДВАРИТЕЛЬНОЙ проверки.Фильтр Блума non-thread safe?
Забудь про thread-safe. Я хотел привести пример вероятностной оптимизации.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36796429
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36796491
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36797297
i'm_novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем большое спасибо!
...
Рейтинг: 0 / 0
47 сообщений из 47, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / "а был ли мальчик?"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]