В функциональных языках программирования есть возможность генерировать бесконечные последовательности значений (как правило чисел) и оперировать этими последовательностями. Реализуется это функцией, которая, не прерывая свою работу, генерирует значения одно за другим на основе своего внутреннего состояния.
Но, к сожалению, в обычных языках нет возможности «вернуть» значения в место вызова не выходя из функции. Один вызов — один результат.
Генераторы удобно было бы использовать совместно с возможностью Delphi по перечислению значений (GetEnumerator/MoveNext/GetCurrent). В этой статье мы создадим функцию-генератор (может даже бесконечную) и будем использовать ее с таким объектом для перечисления, чтобы всё работало прозрачно без необходимости вникать в реализацию.
Читать полностью »
Метка «Алгоритмы» - 12
Бесконечные генераторы значений на Delphi + Ассемблер
2012-11-07 в 17:20, admin, рубрики: Delphi, x64, Алгоритмы, ассемблер, генераторы, Программирование, функциональное программирование, метки: Delphi, x64, Алгоритмы, ассемблер, генераторы, функциональное программированиеАлгоритмы и структуры данных — шпаргалка
2012-10-27 в 8:57, admin, рубрики: coursera, Алгоритмы, сортировки, структуры данных, Учебный процесс в IT, метки: coursera, Алгоритмы, сортировки, структуры данныхПару недель назад, необходимо было освежить информацию в голове информацию по структурам данных и алгоритмам для собеседования. Первым делом полез на www.coursera.org, где хотел пробежаться по некоторым лекциям курса Алгоритмы, там же были две сводные таблички, которые в процессе изучения курса взял на заметку — отлично помогали запомнить сложность операций. Но, к моему удивлению, материалы пройденного курса стали недоступны. Быстрое гугление, в надежде, что кто-нибудь выложил лекции на торрентах, к сожалению, не дало результатов. В итоге, я нашел полную коллекцию слайдов по данному курсу. Спешу Читать полностью »
Модификация в БД табличных или множественных полей документов
2012-10-26 в 10:53, admin, рубрики: mysql, php, Алгоритмы, метки: mysql, PHP, АлгоритмыЧасто в проектах требуется обновление в БД множественных полей каких-либо документов. Наверное существуют готовые решения, но вбив в гугл «изменение множественных свойств документов», «обработка множественных полей», «обработка табличных полей» и т.д., я не нашел никакого решения, поэтому решил написать свое и заодно описать его в этой статье.
Разбор задачи с IOI2012
2012-10-23 в 14:51, admin, рубрики: Алгоритмы, Блог компании ABBYY, Спортивное программирование, метки: Алгоритмы, спортивное программированиеВсем привет! В сентябре прошла международная олимпиада по программированию, IOI 2012. И мы, сборная России, на неё весьма успешно съездили, как вы могли видеть.
Я — Макс Ахмедов. Мне предложили поделиться с общественностью, что из себя представляют подобные соревнования и какие задачи нам приходится решать. Я расскажу о последней задаче второго тура «Jousting Tournament». Английский вариант условия можно найти здесь. К слову, это наиболее простая из трёх задач в тот день :-)
Легенда
В задаче идёт речь о церемонии обручения герцога Лодовико Сфорца, наместника Милана, и герцогини Беатриче д’Эсте, произошедшей в 1491. Организовывать празднества и управлять культурной программой герцог пригласил своего хорошего друга Леонардо да Винчи, который ему предложил, в частности, устроить шикарный рыцарский турнир.
И вот, к началу празднеств оказалось, что вовремя прибыли все рыцари, кроме одного, который опаздывает, но не настолько сильно, чтобы помешать проведению турнира. По случайному совпадению, этот рыцарь был фаворитом толпы, и все сражения с его участием пользовались большой популярностью. Леонардо знает расписание боёв турнира и то, как будут выбираться рыцари для участия в них, и он хочет слегка повлиять на ход турнира таким образом, чтобы рыцарь-фаворит поучаствовал в как можно большем количестве сражений. Так хитрый пиарщик Леонардо собирается увеличить значимость события.
Такая вот захватывающая история.
Есть интересная задача: Поиск двух пропущенных чисел в массиве целых чисел
2012-10-14 в 18:36, admin, рубрики: qt, ruby, Алгоритмы, Программирование, метки: Qt, ruby, Алгоритмы Есть интересная задача: есть массив целых чисел. Числа идут подряд от 1 до k. Но в
массиве пропущены два числа. Как найти эти числа?
Решил поделиться своим решением и реализацией (на Ruby) самого простого из них (еще два приведу в виде алгоритмов).
Способ 1.
Читать полностью »
Ray tracing не только в 3D
2012-10-10 в 14:03, admin, рубрики: canvas, javascript, JS, Алгоритмы, графика, Программирование, характеристическая функция, метки: Canvas, Алгоритмы, графика, характеристическая функцияМногие в общих чертах представляют, как работает лучевая трассировка: через каждый пиксель сцены алгоритм пропускает луч и вычисляет, с какими объектами сцены он пересекается и как в результате данный пиксель должен быть освещён. Алгоритм по сути требует, чтобы у нас была функция, которая для каждой позиции возвращает цвет точки. Разумеется, тот же подход можно применять не только для трёхмерной графики: любое изображение можно растеризовать таким образом, если у нас есть подходящая функция. Рассмотрим для примера, как с помощью такого подхода решить задачу визуализации диаграмм разложения на простые множители, о которой написал helarqjsc.
Моя реализация здесь. На картинке изображено 10! = 3628800, хотя всех деталей, разумеется, не видно.
Читать полностью »
Визуализация характеристической функции
2012-10-10 в 14:03, admin, рубрики: canvas, javascript, JS, Алгоритмы, графика, Программирование, характеристическая функция, метки: Canvas, Алгоритмы, графика, характеристическая функцияМногие в общих чертах представляют, как работает обратная лучевая трассировка: через каждый пиксель окна вывода алгоритм пропускает луч и вычисляет, с какими объектами сцены он пересекается и как в результате данный пиксель должен быть освещён. Алгоритм по сути требует, чтобы у нас была функция, которая для каждой позиции возвращает цвет точки. Разумеется, тот же подход можно применять не только для трёхмерной графики: любое изображение можно растеризовать таким образом, если у нас есть подходящая функция. Рассмотрим для примера, как с помощью такого подхода решить задачу визуализации диаграмм разложения на простые множители, о которой написал helarqjsc.
Моя реализация здесь. На картинке изображено 10! = 3628800, хотя всех деталей, разумеется, не видно.
Читать полностью »
Курс Algorithms от Coursera (4-6 недели обучения)
2012-10-07 в 12:26, admin, рубрики: coursera, java, Алгоритмы, Учебный процесс в IT, метки: coursera, java, АлгоритмыКак и обещал, пишу продолжение статьи, посвященной обучению на курсе Algorithms.
Тех кто не знает структуру курса, прошу в первую статью, там я расписал, как проходит работа. Здесь я расскажу о программе заключительных 3 недель обучения и о финальном экзамене.
Читать полностью »
Определение части речи слова на PHP одной функцией
2012-09-26 в 16:59, admin, рубрики: php, Алгоритмы, метки: PHP, АлгоритмыПрочитав пост http://habrahabr.ru/qa/2410/, я написал функцию, которая определяет из строки слов их части речи. Определение, конечно не 100%, но можно легко дорабатывать.
Функция возвращает массив значений групп:
- 1. прилагательное
- 2. причастие
- 3. глагол
- 4. существительное
Пример вызова функции:
print_r(chastrechiRUS('В небе летит красивый сверкающий самолёт'));
Результат работы функции (массив):
Array ( [0] => 4 [1] => 4 [2] => 3 [3] => 1 [4] => 2 [5] => 4 )
Курс Algorithms от Coursera (1-3 недели обучения)
2012-09-18 в 21:38, admin, рубрики: coursera, java, Алгоритмы, Учебный процесс в IT, метки: coursera, java, Алгоритмы Месяц назад несколько раз на Хабре проскакивали статьи о замечательном ресурсе Coursera, где можно пройти курсы обучения по различным направлениям. Среди прочего меня очень заинтересовал курс «Алгоритмы» (часть 1), на который я подписался и начал его изучать. Сейчас курс приближается к завершению, а я решил написать небольшой отчет по первой части курса (надеюсь меня хватить и на описание второй части курса по его завершению), чтобы уважаемый %username% мог определить стоит ли записываться на следующую итерацию курса или нет.
Читать полностью »