случайные блуждания

April 24, 2007

IBM Ponder This Challenge

Filed under: Uncategorized — sanya @ 2:32 pm

Puzzle for February 2007.

Consider the following two person game. Each player receives a random
number uniformly distributed between 0 and 1. Each player can choose to
discard his number and receive a new random number between 0 and 1.
This choice is made without knowing the other players number or whether
the other player chose to replace his number. What strategy should a
player follow to ensure he will win at least 50% of the time?

REVISED, 2/5/07 — After each player has had an opportunity to replace
his number the numbers are compared and the player with the higher
number wins. 

April 21, 2007

начало, дубль 1001

Filed under: Uncategorized — sanya @ 1:16 pm

Ну что же, в очередной раз столкнувшись с кризисом приходится начинать все сначала. Есть несколько вещей, которые мешают моей продуктивной работе. По значимости:

  1. лень – я увиливаю от работы, не могу заняться ею
  2. procrastination – я постоянно откладываю важные дела “на потом”. Рассуждения из серии “ну у меня еще 10 часов есть в запасе, домашку делать часов 6-7, так что должен успеть”
  3. неорганизованность, несобранность. Начиная делать что-то я быстро отвлекаюсь на всякую ерунду. “посмотрю жж, почитаю почту”
  4. нервы. сорвав какой-нибудь план я начинаю нервничать, так что последствия этого состояния бывают намного хуже последствий срыва плана. Например, таким образом я заболел перед экзаменом по макроэкономике и написал его с температурой на 5-. Писал бы нормальный, получил бы 5.
  5. отношения. У меня очень много времени уходит на отношения. Причем самое плохое, что это время не идет единым куском. Через каждые 10 минут, либо я, либо Оля заговариваем о чем-нибудь и это парализует любую работу. Фактически, как я понял, проанализировав свою учебу, я никогда не сделал ничего существенного если Оля была рядом. Только когда она спала, или ее не было.

Со всем этим надо бороться. Начну с самого простого. Я сделаю сейчас домашку по макро (просроченную!!!). Потом придумаю свою систему time-management’а.

personal development goals

Filed under: Uncategorized — sanya @ 4:59 am

у меня серьезные проблемы из-за моей неорганизованности. С этим нужно что-то делать. Цели на ближайшее время в плане personal development:

  1. Научиться вставать в 5 утра каждый день. Это важно!
  2. Вставать по первому звонку будильника
  3. Не откладывать важные дела, создать какую-нибудь систему планирования

Постараюсь регулярно писать сюда, как удается их реализовать

April 15, 2007

problem 4 (wilmott.com) — 2

Filed under: Uncategorized — sanya @ 2:37 pm

Problem
There is a 60% chance of rain on Saturday and 30% chance of rain on Sunday. Estimate the range (min,max) of the dry weekend propability.
Solution

We have two events A and B (dry Saturday and dry Sunday). P(A) = 1 -0.6 =0.4 and P(B) = 1 - 0.3 = 0.7. We need to calculate P(AB). Since we don’t know correlation between A and B, we can only have an estimates p_{min}=0.7+0.4-1=0.1 and p_{max} = min(0.7, 0.4) = 0.4. And thus the problem solved. We can also calculate the covariation. Let’s introduce two RVs \xi_1 \sim Bernoulli(P(A)) and \xi_2 \sim Bernoulli(P(B)). Since we have P(\xi_1\,\xi_2=1) = E(\xi_1\,\xi_2)=E(\xi_1)E(\xi_2)+cov(\xi_1, \xi_2). And finally cov(\xi_1, \xi_2)_{min}= -0.18 and cov(\xi_1, \xi_2)_{max}=0.4-0.28=0.12 which coinsides with intuition: covariation could be either negative or positive.

небольшой disclaimer

Filed under: C++, лытдыбр — sanya @ 6:07 am

В последнее время меня сильно захватила идея стать Quantitative Analyst. А поскольку на Analyst я, честно говорю, не слишком-то тяну, то хочется сначала стать хотя бы Quantitative Developer. Хватит ли меня на это или нет – неизвестно, тем более что учеба в рэшке отнимает много времени. Посмотрим.

План “занятий” следующий. Основные 3 области которые будут спрашивать на собеседовании: математика (PT, Stochastic, PDE); программирование (C++, data structures, algorithms); finance (derivatives etc)

Второе я как бы немного знаю, нужно будет только немного подтянуть к собеседованию. Первое – знаю не очень хорошо, вот поэтому и буду ботать. Финансам надеюсь научат в рэшке хоть на каком-то уровне.

Такие дела. Постараюсь в этот блог писать о прогрессе.

April 25, 2006

Richard Hamming “You and Your Research”

Filed under: лытдыбр — sanya @ 9:16 am

http://www.cs.virginia.edu/~robins/YouAndYourResearch.pdf

Очень интересный текст. Вкратце: чуви задает каждому 3 вопроса

  • Какие самые важные проблемы в твоей области?
  • Работаешь ли ты над одной из них?
  • Почему нет?

Very inspiring :) Все, ушел работать над телепортационно-антигравитационной машиной времени :)

Now playing: Destinys Child – Say My Name

March 28, 2006

Как мы готовимся к экзаменам

Filed under: C++, лытдыбр — sanya @ 6:29 pm

На днях увидел старую статейку, которую уже когда-то давно просматривал. Суть: чувак написал compile-time вычисление синусов. Вещь это полезная, ибо например, если я напишу int a = 2+2*2, умный компилятор поймет, что это константа и я имел в виду int a = 6. Но если я напишу double x = sin(0), то он уже ничего понимать не будет, ибо синусам не обучен. Они для него это – нечто сидящее в . Потому – compile-time синусы вещь в хозяйстве полезная и неплохо бы, если с ними часто приходится работать, было обучить компилятор их понимать и вычислять. Естественно, это можно сделать через шаблоны, что чувак и делает. Затем, он утверждает, что написал massively inlined версию FFT server, которая работает аж в 3 (три!!!) раза быстрее обычной (что само по себе очень сомнительно). Вот его код:

template
class Sine {
public:
    static inline float sin()
    {
        return (I*2*M_PI/N) * SineSeries::accumulate();
    }
};

// Compute J terms in the series expansion.  K is the loop variable.
template
class SineSeries {
public:
    enum { go = (K+1 != J) };

    static inline float accumulate()
    {
        return 1-(I*2*M_PI/N)*(I*2*M_PI/N)/(2*K+2)/(2*K+3) *
            SineSeries::accumulate();
    }
};

// Specialization to terminate loop
template
class SineSeries {
public:
    static inline float accumulate()
    { return 1; }
};

Создавать template … нельзя по понятным причинам (например, и одна специализация или разные?), потому параметр здесь передается в виде i*2pi/n.

Как вы можете видеть, синус здесь вычисляется через ряд  sin x = x – x^3/3! + x^5/5! – x^7/7! + … В школе и институте меня всегда учили, что так считать синус очень-очень плохо. Собственно, чем такой способ плох можно увидеть вычислив не предложенные в статье Sine::sin(); а хотя бы Sine::sin(); Получим мы значение около 8.545132. Таким синус бывает только в военное время. Следовательно, надо либо увеличивать число членов в ряде (по дефолту оно 10), либо писать на темплейтах что-то типа (x mod 2*pi). Очутившись перед выбором, я конечно выбрал третий вариант. А именно: воспользовавшись школьной формулой

sin\,x = 3sin\frac{x}{3} - 4\sin^3\frac{x}{3}

и применяя ее рекурсивно, уменьшать аргумент синуса до тех пор, пока он не станет малым, например 0.1. А для таких малых значений sin(x) = x. Для того, чтобы это реализвать, мне понадобилось проверять условие в малости. Набрав в гугле “compile time if c++” я нашел статью, в которой показано как это делать. В принципе способ очень простой, мог бы и сам догадаться. В итоге получился следующий код:

 #define M_PI 3.141592
template
struct if_less {};

template
struct if_less //less than tolerance
{
  template
  static inline double st(void) { return (i*2*M_PI/n);}
};

template
struct if_less //greater than tolerance
{
  template
  static inline double st(void)
  {
    double s = sine_rec::calc();
    return (3*s – 4*s*s*s);
  }
};

template
struct sine_rec
{
  static inline double calc()
  {
    return if_less::st();
  }
};

который делает все то же самое, но быстрее и надежнее :)

Blog at WordPress.com.