juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2010-02-08 02:56 pm

с интервью

Интервьюировал тут интересного француза, из-под Гренобля - Еколь Политекник, потом Бёркли. Мой первый вопрос - хрен ли тут у нас на посёлке делать после прекрасных предгорий? А тут типа у нас жизнь (а там типа нету). Молодёжь!

Короче, задал ему недавно тут пролетавшую задачу - сумму максимальных нечётных делителей для чисел от 1 до N. Сначала написал джавный код, который, будь у нас tail recursion (у него второй язык CAML), был бы ничо бы.

Я его попросил пооптимизировать. Нарисовал алгоритм, пропорциональный N. Я предложил поискать алгоритм, пропорциональный логарифму N. И тут он нарисовал чудесную вещь.

Он нарисовал график, где по горизонтальной оси N, а по вертикальной - значения, которые он складывает (ну понятное дело, логарифмы складывает). По горизонтали N столбиков. Или, по вертикали, log2(N) полосок. После чего решил взять, да интегрировать не по x, а по y. Так что сумм у нас будет всего log2(N), а значения, что суммируются - ну не биг дил посчитать.

Ребята, я такой фокус первый раз вижу! Наглядно донельзя: на графике.

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

Ну дай бог он к нам согласится.

[identity profile] ygam.livejournal.com 2010-02-09 06:45 pm (UTC)(link)
все делящиеся на 4 с остатком 2, деля их на 2

[identity profile] lanceupper.livejournal.com 2010-02-09 07:37 pm (UTC)(link)
:) Если вы возьмете последовательность чисел "делящиеся на 4 с остатком 2" и разделите их на 2, то вы получите последовательность чисел делящихся на 2 с остатком 1, т.е. просто напросто последовательность нечетных чисел: 1, 3, 5, 7... :) Объяснять это через нагромождение "все делящиеся на 4 с остатком 2, деля их на 2" - это все равно что ехать из Москвы с Санкт-Петербург через Владивосток.

На самом деле если выписать последовательность наших слагаемых на бумажке, то видно, что это просто напросто набор последовательностей 1, 3, 5, 7... вложенных друг в друга совершенно очевидным образом. Если вычеркнуть "самую верхнею" подпоследовательность 1, 3, 5, 7... (т.е. через одну), то оставшаяся подпоследовательность будет иметь тот же самый вид. Фрактал, понимаш :)

А решение из этого - очевидно. Берем сумму 1, 3, 5, 7... до N (арифметическая прогрессия), прибавляем сумму 1, 3, 5, 7... до N/2, затем до N/4 и т.д. до победного конца.

[identity profile] buddha239.livejournal.com 2010-02-10 12:18 am (UTC)(link)
А ведь не так и трудно просуммировать 1+3+5+7...!:)

[identity profile] lanceupper.livejournal.com 2010-02-10 12:29 am (UTC)(link)
А явно суммировать ничего и не надо. Формулу суммы N первых членов арифметической прогрессии проходят в школе.