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

и задачки для интервью.
Аватара пользователя
KP580BE51
Уже с Приветом
Сообщения: 15007
Зарегистрирован: Вт июн 14, 2005 6:50 am
Откуда: Ukraine

Сообщение KP580BE51 »

Taffi писал(а):unsigned int num_local_maximums( const int array[], size_t size )
for(i = 1; i < size; i++) {
}
return n;
}


Форматирования нет. Еще одно интервью завалено. :)
dimp
Уже с Приветом
Сообщения: 4936
Зарегистрирован: Вт ноя 22, 2005 2:32 pm
Откуда: Maryland

Сообщение dimp »

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

Определение локального максимума функции действительно однозначно, но никакой "производной" там нет, вобще говоря, производная может быть вобще неопределена в этой точке, как тогда говорить о том, что она "меняет знак".:pain1: Точка x0 является локальным максимумом f(x), если существует такое e>0, что для любого x, |x-x0|<e, выполняется f(x0)>=f(x)
Аватара пользователя
kostia00
Уже с Приветом
Сообщения: 448
Зарегистрирован: Вт июн 11, 2002 9:09 pm
Откуда: Moscow, RU - Chicago, IL - Greenwich, CT

Сообщение kostia00 »

Izh писал(а):Кстати, вышеуказанное
решение далеко не оптимальна, поскольку
использует два сравнения, когда можно обойтись
одним.


Каково ваше определение: что считается сранвением? if (x) где x - bool, это тоже сравнение по-моему.
I am about to develop an attitude
Аватара пользователя
KP580BE51
Уже с Приветом
Сообщения: 15007
Зарегистрирован: Вт июн 14, 2005 6:50 am
Откуда: Ukraine

Сообщение KP580BE51 »

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

Определение локального максимума функции действительно однозначно, но никакой "производной" там нет, вобще говоря, производная может быть вобще неопределена в этой точке, как тогда говорить о том, что она "меняет знак".: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:
Izh
Уже с Приветом
Сообщения: 172
Зарегистрирован: Сб фев 15, 2003 10:57 am
Откуда: Moscow

Сообщение Izh »

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

Определение локального максимума функции действительно однозначно, но никакой "производной" там нет, вобще говоря, производная может быть вобще неопределена в этой точке, как тогда говорить о том, что она "меняет знак".: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:


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

Если уж говорить об определениях, тот вот ссылка из
той же wikipedi-и. Заметьте, что я не спорю с вашим
определением, в задачке подразумевалось, что вы
его либо спросите, либо зададите сами и озвучите.

http://en.wikipedia.org/wiki/Local_extremum
point x* is a local (or relative) maximum of a function f if there exists some ε > 0 such that f(x*) f(x) for all x with |x-x*| < ε. On a graph of a function, its local maxima will look like the tops of hills.


То есть по этому определению, если у вас есть две соседние
(попадающие в ε-окрестность друг друга) точки, значения функции которых равны и одна из которых является
локальным максимумом, то другая также должна быть
локальным максимумом.
Izh
Уже с Приветом
Сообщения: 172
Зарегистрирован: Сб фев 15, 2003 10:57 am
Откуда: Moscow

Сообщение Izh »

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

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


Вы меня опередили. :)
Аватара пользователя
KP580BE51
Уже с Приветом
Сообщения: 15007
Зарегистрирован: Вт июн 14, 2005 6:50 am
Откуда: Ukraine

Сообщение KP580BE51 »

Izh писал(а):Эта задачка не на знание соискателем матанализа, а только
повод для разговора, чтобы понять, что тот из себя
представляет, в частности насколько он отдает себе отчет в
своих действиях и насколько он аккуратен. Вы тест не прошли.

Ну и хорошо. Удачи в поиске телепатов. :)

Если уж говорить об определениях, тот вот ссылка из
той же wikipedi-и. Заметьте, что я не спорю с вашим

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

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

То есть по этому определению, если у вас есть две соседние
(попадающие в ε-окрестность друг друга) точки, значения функции которых равны и одна из которых является
локальным максимумом, то другая также должна быть
локальным максимумом.

Еще раз. Удачи в поиске телепатов. :hat:
Аватара пользователя
Иоп
Уже с Приветом
Сообщения: 8832
Зарегистрирован: Пт фев 18, 2005 2:00 am
Откуда: Yekaterinburg --> Toronto

Сообщение Иоп »

KP580BE51 писал(а):Вы задали глубоко оторваный от реальности вопрос. Вы получили такойже ответ. Это все равно что попросить человека принести кирпич, а потом начать расказывать, что дескать вы хотели силикатный кирпич, а лучше не силикатный а шлакоблок..... Если вам хочется пива, и вы просите налить вам пива, то у вас могут спросить, какого пива вам хочется, а могут просто налить пива, и будут абсолютно правы.

ППКС! :fr:
Не знаю как в программировании, а в нашей области, если потенциальный работодатель задаст подобную задачку на интервью, то потенциальный сотрудник его пошлет лесом. Потому что любая работа - это сотрудничество. И если работодатель позволяет себе неточности в постановке задачи, но требует точности в решении, то сотрудничества не получится! :umnik1: Мы называем это профессиональной этикой, которой похоже нет в программировании.
Аватара пользователя
KP580BE51
Уже с Приветом
Сообщения: 15007
Зарегистрирован: Вт июн 14, 2005 6:50 am
Откуда: Ukraine

Сообщение KP580BE51 »

Иоп писал(а):ППКС! :fr:
Не знаю как в программировании, а в нашей области, если потенциальный работодатель задаст подобную задачку на интервью, то потенциальный сотрудник его пошлет лесом. Потому что любая работа - это сотрудничество. И если работодатель позволяет себе неточности в постановке задачи, но требует точности в решении, то сотрудничества не получится! :umnik1: Мы называем это профессиональной этикой, которой похоже нет в программировании.

Это не в программировании ее нет. Это в некоторых фирмах ее нет. В общем это обкатеннейший метод фильтрации "нужных" сотрудников. Непонятно зачем такой человек на форум пришел? Или всех местных уже распугал, а начальство требует результат? :) А выработка постановки задачи, это длинный и сложный для всех процес, в котором такие мелочи как обработка исключений, составляют такие мелочи, что о них и не говорят.
Izh
Уже с Приветом
Сообщения: 172
Зарегистрирован: Сб фев 15, 2003 10:57 am
Откуда: Moscow

Сообщение Izh »

KP580BE51 писал(а):Ну и хорошо. Удачи в поиске телепатов. :)


Интересно то, что довольно много народу решило эту
задачку правильно.

Вы спорите с правильностью решения задачи.


Разумеется. Она не работает для массива нулевой длины.

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


Эта логика не работает в программировании. Неформальный
(в математическом смысле) подход к постановке задачи очень
часто приводит к тому, что заказчик получает не совсем (или
совсем не то) что просил, а также ведет к большому
количеству ошибок при дизайне, когда люди принимают
свои предположения о том, как устроен окружающий мир
за действительность, без предварительной проверки.
Izh
Уже с Приветом
Сообщения: 172
Зарегистрирован: Сб фев 15, 2003 10:57 am
Откуда: Moscow

Сообщение Izh »

Taffi писал(а):unsigned int num_local_maximums( const int array[], size_t size )
{
BOOL bGrow = FALSE;
unsigned int n = 0, i;

for(i = 1; i < size; i++) {
if (array[i] >= array[i-1])
bGrow = TRUE;
else if (bGrow) {
n++;
bGrow = FALSE;
}
}
return n;
}


Если понимать под определением локального максимума элемент, который больше своих соседей, то задача решена верно. Вы, судя по всему, больше под Windows пишите?
Gabo
Уже с Приветом
Сообщения: 324
Зарегистрирован: Пн фев 23, 2004 8:01 am

Сообщение Gabo »

К решению Taffi надо добавить в начало

Код: Выделить всё

   if(size < 2)
      return size;
Izh
Уже с Приветом
Сообщения: 172
Зарегистрирован: Сб фев 15, 2003 10:57 am
Откуда: Moscow

Сообщение Izh »

Gabo писал(а):К решению Taffi надо добавить в начало

Код: Выделить всё

   if(size < 2)
      return size;


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

1. Не очевидно поведение на краях массива.
2. Игнорируются плоские локальные максимумы.
Taffi
Новичок
Сообщения: 66
Зарегистрирован: Чт мар 10, 2005 2:53 pm

Сообщение Taffi »

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


Сейчас - да.

2. Игнорируются плоские локальные максимумы.

Ну не совсем. Для "0 1 1 1 0" вернет 1.
Полет - единственный достойный способ путешествия!
Братья Райт
Izh
Уже с Приветом
Сообщения: 172
Зарегистрирован: Сб фев 15, 2003 10:57 am
Откуда: Moscow

Сообщение Izh »

Taffi писал(а):
2. Игнорируются плоские локальные максимумы.

Ну не совсем. Для "0 1 1 1 0" вернет 1.


Если понимать под локальным экстремумом точку, где
производная меняет знак, то вы правы. Если пользоваться
определением из Wikipedi-и, то нет. Вы, случайно, не физик?
Ответить

Вернуться в «Головоломки»