OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 18 Июнь, 2025 20:53

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 197 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 10  След.
Автор Сообщение
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Вторник, 29 Май, 2007 13:49 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Vlad писал(а):
Если хочется поломать голову именно над алгоритмом - попробуй не ходя на goggle написать эффективный поиск подстроки в строке. Или эффекивный поиск в строке любого символа из другой строки.

Зачем Google, если есть "Algorithms and Data Structures" Вирта. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Вторник, 29 Май, 2007 13:52 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
PGR писал(а):
Об эффективности спорить не буду, а вот с понятностью будет похуже :)


Просто сишный синтаксис не самый лучший для записи подобных алгоритмов. На хаскеле это смотрелось бы намного элегантнее и понятнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Вторник, 29 Май, 2007 13:56 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Vlad писал(а):
PGR писал(а):
Vlad писал(а):
Тем не менее. Если это компилятор какого-нибудь функционального языка, то теория очень легко превращается в практику.

Только по причине отсутствия оператора WHILE в языке.


Остается только задуматься о том, почему такой cупер оператор не добавили в язык ;) Наверное потому, что всякие хаскели придумывали "народные ополченцы" :)

Работа WHILE основана на изменении состояния, а в функциональных языках такое недопустимо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Вторник, 29 Май, 2007 13:57 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
PGR писал(а):
Работа WHILE основана на изменении состояния, а в функциональных языках такое недопустимо.


Вопрос был риторическим ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Вторник, 29 Май, 2007 14:04 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Vlad писал(а):
Остается только задуматься о том, почему такой cупер оператор не добавили в язык ;) Наверное потому, что всякие хаскели придумывали "народные ополченцы" :)

"Народные ополченцы" как раз и не используют WHILE, а только FOR :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Вторник, 29 Май, 2007 15:16 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Сергей Губанов писал(а):
Это говорит о том, что испытуемый - типичный "народный ополченец" от программирования.

А обоснования?


Читайте Дейкстру.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Вторник, 29 Май, 2007 15:29 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Читайте Дейкстру.


Сейчас еще придет info21 и пошлет учить марковские языки. Ладно, продолжайте оценивать программистов по принципу WHILE. Чтобы что-то переосмыслить некоторым надо лично наступать на грабли.

P.S. "Студентов жалко" (c) не мой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Вторник, 29 Май, 2007 16:13 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Vlad писал(а):
Сейчас еще придет info21 и пошлет учить марковские языки. Ладно, продолжайте оценивать программистов по принципу WHILE. Чтобы что-то переосмыслить некоторым надо лично наступать на грабли.

А что такое марковские языки и зачем они нужны?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Вторник, 29 Май, 2007 19:48 

Зарегистрирован: Среда, 28 Февраль, 2007 00:08
Сообщения: 142
Откуда: Нижний Новгород
Vlad писал(а):
Вот еще один алгоритм без цикла, который теоретически на каком-то компиляторе может оказаться быстрее WHILE (извиняюсь за C):
Код:
char *find(char *begin, char *end, char f)
{
    return begin == end ? end
         : *begin == f ? begin
         : find(begin + 1, end, f);
}

А это часом не тот же while только сбоку :?:
Да и на функциональных языках в примерах, если не ошибаюсь, идет подогнанный под местную специфику while.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Вторник, 29 Май, 2007 22:25 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Vlad писал(а):
Где find - аналог стандартной функции практически любого уважающего себя современного ЯВУ (оберон, к несчастью, такую функцию реализовать не позволяет). И знание этой функции надо требовать на собеседовании, чтобы потом не продираться через горы велосипедных циклов, навернутых только ради поиска элемента в последовательности.

Функцию запомнить не сложно, речь не об этом. Речь о том, что люди не умеют правильно строить циклы. В частности, правильно написать внутреннее устройство этой самой find.
Завтра ему придется написать не линейный поиск в массиве, а, к примеру, ожидание заданной последовательности на сокете. И он точно так же напишет через то же место, даже не зная, что для этого применяется алгоритмическая схема, которую раньше проходили в 8 классе...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 30 Май, 2007 08:43 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
Мне кажется некоторые господа являются откровенными провокаторами. Был конкретный вопрос:
Цитата:
Я на собеседовании первым делом прошу написать линейный поиск элемента в массиве....
А не, какая библиотечная функция, конкретного Я/П, находит заданный элемент в массиве. Нужна была реализация линейного поиска, а не название функции из библиотеки. Если на собеседовании спрашивают об API, то лучше сразу распрощаться и не тратить время - нужен тривиальный кодер, а не мозги.

Тем более я не понимаю разговоры про оптимизацию кода, что эффективнее: WHILE-, FOR-, for-if-break- циклы, два цикла вместо одного или вообще хвостовая рекурсия?

Нормальный компилятор преобразует всю эту кухню в один код, а если будут нюансы, аппаратура доделает свою работу. В любом случае после компилятора и Hardware-оптимизации, полученный микро код будет зависеть от огромного количества параметров (сколько там всяких только Pentium-IV уже на клепали).

Поэтому предполагать какой код будет эффективнее, можно имея сам компилятор, все опции, точную спецификацию аппаратуры. Только многоуровневый cash и branch-prediction, могут сделать невероятные вещи с принимаемым кодом. Так что либо нужно быть ну слишком умным, либо... полным безумцем-глупцом.

На то он и язык высокого уровня, чтобы не держать в голове все тонкости железа на котором ваша программа будет (или гипотетически может) работать, а сосредоточится на самом алгоритме - извиняюсь за банальность.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Среда, 30 Май, 2007 09:20 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
PGR писал(а):
А что такое марковские языки и зачем они нужны?


Судя по тому, что в google они упоминаются только в контексте info21, это или его собственная придумка (во всяком случае сам термин) или нечто очень эзотерическое.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Среда, 30 Май, 2007 09:23 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
batyrmastyr писал(а):
А это часом не тот же while только сбоку :?:


Если и сбоку, то намного дальше чем foreach...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Среда, 30 Май, 2007 09:30 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Функцию запомнить не сложно, речь не об этом. Речь о том, что люди не умеют правильно строить циклы.


Допустим. Может ты расскажешь чем WHILE принципиально лучше foreach применительно к C# для поиска элемента. Сергей это сделать затруднился. Я, например, могу привести как минимум одну причину, почему WHILE хуже.

Илья Ермаков писал(а):
В частности, правильно написать внутреннее устройство этой самой find.
Завтра ему придется написать не линейный поиск в массиве, а, к примеру, ожидание заданной последовательности на сокете. И он точно так же напишет через то же место,


Через какое место?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 30 Май, 2007 09:47 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
slava писал(а):
Мне кажется некоторые господа являются откровенными провокаторами. Был конкретный вопрос:
Цитата:
Я на собеседовании первым делом прошу написать линейный поиск элемента в массиве....
А не, какая библиотечная функция, конкретного Я/П, находит заданный элемент в массиве.


Все зависит от того, кого собеседуешь. Если это студент, то да, можно сделать упор на алгоритмику (хотя линейный поиск все равно совершенно не показателен) и не обращать внимание на незнание стандартной библиотеки (это приходит только с опытом). Но если собеседуешь специалиста и он не знает как пользоваться стандартной билиотекой, зато круто пишет циклы, то это не специалист.

slava писал(а):
Тем более я не понимаю разговоры про оптимизацию кода, что эффективнее: WHILE-, FOR-, for-if-break- циклы, два цикла вместо одного или вообще хвостовая рекурсия?


Разговоры про оптимизацию начались после заявления о том, что быстрее WHILE вряд ли что-то можно придумать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Об одной задаче из ЕГЭ
СообщениеДобавлено: Среда, 30 Май, 2007 10:12 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Vlad писал(а):
PGR писал(а):
А что такое марковские языки и зачем они нужны?


Судя по тому, что в google они упоминаются только в контексте info21, это или его собственная придумка (во всяком случае сам термин) или нечто очень эзотерическое.

Поэтому и спросил. Подождем автора, он и объяснит :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 30 Май, 2007 10:20 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Vlad писал(а):
Разговоры про оптимизацию начались после заявления о том, что быстрее WHILE вряд ли что-то можно придумать.

Что нужно для линейного поиска в массиве:
1. установить текущий индекс равным индексу первого элемента
2. сравнить его с индексом последнего, если превышает -- закончить
3. сравнить текущий элемент с искомым, если равен -- закончить
4. инкрементировать индекс и повторить, начиная с п. 2

Цикл WHILE это напрямую выражает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 30 Май, 2007 10:42 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
PGR писал(а):
Vlad писал(а):
Разговоры про оптимизацию начались после заявления о том, что быстрее WHILE вряд ли что-то можно придумать.

Что нужно для линейного поиска в массиве:
1. установить текущий индекс равным индексу первого элемента
2. сравнить его с индексом последнего, если превышает -- закончить
3. сравнить текущий элемент с искомым, если равен -- закончить
4. инкрементировать индекс и повторить, начиная с п. 2

Цикл WHILE это напрямую выражает.


И чего? А foreach избавляет программиста от пунктов 1, 2, 4. Это плохо?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 30 Май, 2007 10:52 

Зарегистрирован: Понедельник, 19 Март, 2007 09:40
Сообщения: 142
Откуда: USA, Israel, Belarus
Тем, что в цикле foreach не должно быть впринципе пункта 3.
foreach это и есть FOR EACH, а не for each, but while....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 30 Май, 2007 10:53 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я не помню, как там выглядит Foreach в C#, но что-то мне подсказывает, что при линейном поиске потребуется делать выход из него по break, как и из обычного for - или он включает в себя сразу и дополнительное условие окончания? Если включает, то спорить не о чем - кто пишет, на Шарпе - пусть себе использует, а учить программированию не с Шарпа надо...

Если по break - то о том и речь. Грубая ошибка алгоритмизации - использование цикла с предопределенным числом проходов, а потом лихорадочный поиск, как бы "спрыгнуть с поезда" в середине пути... И, конечно же, goto, пусть и в ипостаси break.
Когда учили на БП/Дельфи, то приходилось студентов по рукам бить за такое - хоть они и не виноваты, их чаще всего никто не учил основным схемам циклов. С Обероном/КП бить не нужно, т.к. BREAK нет - нет и соблазна к клепанию...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 197 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 10  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB