Задачка про локальные максимумы

и задачки для интервью.
8K
Уже с Приветом
Posts: 5552
Joined: 20 Mar 2001 10:01
Location: SFBA

Post by 8K »

ПБХ wrote:
8K wrote:
ПБХ wrote:Производная для последовательностей вообще не определена.

Ну, уж если интегралы берут по дискретной мере, то неужели для производных ничего не придумали?

Столько много слов - я прям теряюсь. Вы имели в виду интеграл Лебега по дискретной мере?

Не берите в голову. Это все слова, что я запомнил с курса мат.анализа.
User avatar
Иоп
Уже с Приветом
Posts: 8832
Joined: 18 Feb 2005 08:00
Location: Yekaterinburg --> Toronto

Post by Иоп »

Вот это сильно!!! :mrgreen: Можно хоть сейчас в Юмор переносить! :funny:
User avatar
TheKonst
Уже с Приветом
Posts: 1715
Joined: 23 Jan 2003 19:42
Location: Houston, TX

Post by TheKonst »

8K wrote:
Dimchik wrote:про неусточивость вообще ничего не знаю

Это из курса "вычей", т.е. вычислительных методов. Не все методы одинаково пригодны для практических целей.

Весточка из родных пенатов.


Черт побери, 8К! Я искал ету книгу где только мог! Вот уж спасибо за ссылку!
User avatar
IvanGrozniy
Уже с Приветом
Posts: 10399
Joined: 04 Feb 2004 14:14
Location: Edgewater, NJ

Post by IvanGrozniy »

ПБХ wrote:Для дискретного массива понятие "производная" не существует. Другой вопрос, что если у Вас есть функция определенная на непрерывном интервале и дифференцируемая в какой-то точке внутри его, то можно построить приближение к производной на дискретных решетках. Это, действительно, делается в численных методах сплошь и рядом.

Тем не менее все это не имеет никакого отношения к определению локального максимума (минимума) у дискретного сигнала.

Браво :appl:
Я уж и забывать начал и все никак вспомнить не мог точное определение производной.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Post by Flash-04 »

мои 5 центов. мое сильное убеждение, что подобные задачи создаются не с целью раскрыть таланты интервьюируемого, а чтобы его завалить можно было :lol: сильно это мне напоминает дополнительные задачи на институстких экзаменах ;)
User avatar
IvanGrozniy
Уже с Приветом
Posts: 10399
Joined: 04 Feb 2004 14:14
Location: Edgewater, NJ

Post by IvanGrozniy »

Flash-04 wrote:мои 5 центов. мое сильное убеждение, что подобные задачи создаются не с целью раскрыть таланты интервьюируемого, а чтобы его завалить можно было :lol: сильно это мне напоминает дополнительные задачи на институстких экзаменах ;)

Кто позже всех завалилися тот молодец и будет работать. Справедливо?
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Post by Flash-04 »

IvanGrozniy wrote:Кто позже всех завалилися тот молодец и будет работать. Справедливо?

работать будет тот кого не завалят ;) а насчет справедливости, меня проинформировали что такого явления в природе нет :pain1:
User avatar
KirAleks
Уже с Приветом
Posts: 210
Joined: 25 Apr 2001 09:01
Location: Kaluga->Minsk->SFBA

Post by KirAleks »

KP580BE51 wrote:
dimp wrote:
KP580BE51 wrote:Определение максимума в математике достаточно однозначно - это точка в которой первая производная меняет знак.

Определение локального максимума функции действительно однозначно, но никакой "производной" там нет, вобще говоря, производная может быть вобще неопределена в этой точке, как тогда говорить о том, что она "меняет знак".:pain1: Точка x0 является локальным максимумом f(x), если существует такое e>0, что для любого x, |x-x0|<e, выполняется f(x0)>=f(x)


http://en.wikipedia.org/wiki/Extremum
a maximal extremum (maximal turning point or relative maximum) is one where the derivative of the function changes from positive to negative;

В этом смысле что искать точку где array[i-1]- array[i] "changes from positive to negative" более правильно. математически, а не по мнению "lzh" :)
:hat:


По вашему ответу становится ясно что математический анализ в Университете вам не преподавали. Я целиком поддерживаю определение Dimpa (в математическом смысле)
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

KirAleks wrote:По вашему ответу становится ясно что математический анализ в Университете вам не преподавали. Я целиком поддерживаю определение Dimpa (в математическом смысле)

Вы над этим думали 2 месяца? :horror:
User avatar
KirAleks
Уже с Приветом
Posts: 210
Joined: 25 Apr 2001 09:01
Location: Kaluga->Minsk->SFBA

Post by KirAleks »

KP580BE51 wrote:
KirAleks wrote:По вашему ответу становится ясно что математический анализ в Университете вам не преподавали. Я целиком поддерживаю определение Dimpa (в математическом смысле)

Вы над этим думали 2 месяца? :horror:


Не обижайтесь, пожалуйста, просто только что увидел увидел эту задачку. А про математическую подготовку - сразу в глаза бросилось....
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

KirAleks wrote:Не обижайтесь, пожалуйста, просто только что увидел увидел эту задачку. А про математическую подготовку - сразу в глаза бросилось....

Разные вещи по разному преподают. Если разбираться каждый раз что как и зачем называется, то можно поехать крышей.
User avatar
KirAleks
Уже с Приветом
Posts: 210
Joined: 25 Apr 2001 09:01
Location: Kaluga->Minsk->SFBA

Post by KirAleks »

AndreyT wrote:Я бы реализовывал эту функцию так (при условии подсчета количества максимальных плато, в том числе ширины 1, без учета плато на краях массива)
...

Code: Select all

size_t num_local_maximums(const int a[], size_t n)
{
  size_t c = 0;

  if (n > 2)
  {
    unsigned char rise;

    for (++a, --n, rise = *(a - 1) < *a; n > 0; ++a, --n)
      if (rise ? *(a - 1) > *a : *(a - 1) < *a)
      {
        c += rise;
        rise = !rise;
      }
  }

  return c;
}


Но... хм.. может еще чего-то не дотестировал...

Стоит, однако, заметить, что принципиальных отличий от варианта Taffi тут нет.


Я вот предлагаю принципиально новый вариант НА ПОРУГАНИЕ который действительно использует ОДНО !!! сравнение на шаг. Естественно не учитываем проверку на границы массива.
Для простоты чтения конструкции привожу его в алгоритмическом виде. Прошу заметить что все приведeнное ниже можно легко модернизировать для потока данных.
Специально для К155ЛА3 :lol: : число сбросов процессорной очереди, которое приводит к тормозам (зависит это на самом деле от ВЫПОЛНЕНИЯ инструкции jmp, а не от операции сравнения -как вы писали- однако действительно при сравнении обычно jmp-подобная инструкция вставляется в негативную ветвь ) здесь прямо пропорционально числу экстремумов в массиве.
А ну и сложность алгоритма соот-но T(n)=n+C;

Code: Select all

size_t num_local_maximums(const int a[], size_t n) 
{
  size_t maxc = 0;
  unsigned int i = 2;
  if (n>2) {
      if (a[1]<a[0])  goto label1;
      label2:
      while ( i<=n ) {
         if (a[i]<a[i-1]) {
           maxc++;
           goto label1;
         }
         i++  ;
      }
      label1:
      while ( i<=n ) {
         if (a[i]>=a[i-1]) {
           goto label2;
         };
         i++;
      }
  }

 return maxc;
}

Izh
Уже с Приветом
Posts: 172
Joined: 15 Feb 2003 16:57
Location: Moscow

Post by Izh »

KirAleks wrote:

Code: Select all

size_t num_local_maximums(const int a[], size_t n) 
{
  size_t maxc = 0;
  unsigned int i = 2;
  if (n>2) {
      if (a[1]<a[0])  goto label1;
      label2:
      while ( i<=n ) {            <-------------
         if (a[i]<a[i-1]) {         <-------------
           maxc++;
           goto label1;
         }
         i++  ;
      }
      label1:
      while ( i<=n ) {             <-------------
         if (a[i]>=a[i-1]) {       <-------------
           goto label2;
         };
         i++;
      }
  }

 return maxc;
}



С ходу вижу грубую ошибку. Что произойдет, когда i достигнет n?
User avatar
KirAleks
Уже с Приветом
Posts: 210
Joined: 25 Apr 2001 09:01
Location: Kaluga->Minsk->SFBA

Post by KirAleks »

KirAleks wrote:....
Для простоты чтения конструкции привожу его в алгоритмическом виде. Прошу заметить что все приведeнное ниже можно легко модернизировать для потока данных.
.....


2 Izh : Ваша оценка, как вы ее сами назвали "с ходу", не является по оценкой по существу.

Code: Select all

 while ( i<=n ) 
- алгоритмическая проверка конца массива. Сущьность не в том чтобы оценить выходит ли индекс за границы массива, а в реализации алгоритма позволяющего за ОДНО СРАВНЕНИЕ отсечь локальные екстремумы.

Есть ли какие-то замечания по поводу работы самого алгоритма?
Тут фактически второе статическое сравнение заменено двумя операторами goto.
Izh
Уже с Приветом
Posts: 172
Joined: 15 Feb 2003 16:57
Location: Moscow

Post by Izh »

KirAleks wrote:2 Izh : Ваша оценка, как вы ее сами назвали "с ходу", не является по оценкой по существу.

Code: Select all

 while ( i<=n ) 
- алгоритмическая проверка конца массива. Сущьность не в том чтобы оценить выходит ли индекс за границы массива, а в реализации алгоритма позволяющего за ОДНО СРАВНЕНИЕ отсечь локальные екстремумы.


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

Одним из важнейших критериев "хорошести" алгоритма, на мой взгляд, является его работоспособность. Если он не работает, то о чем можно говорить?

Есть ли какие-то замечания по поводу работы самого алгоритма?


Замечания есть. Дайте только, пожалуйста, определение локального максимума, которым Вы пользовались.

Return to “Головоломки”