All streams
Search
Write a publication
Pull to refresh
52
0

User

Send message
Дело в том, что CentOS5 вышел до Python 2.6.
И теперь представьте себе — Вы, огромная энтерпрайз-корпорация, держите у себя кучу редхетовских серверов, на которых работает питоновское приложение. Так как с самого начала у Вас был RHEL5, то оно и написано под него, и у него могут быть проблемы с переходом на 2.6. И вот, внезапно, RedHat заявляет: Python 2.6 вышел 19 сентября 2006 года! Все errata теперь будут тянуть по зависимостям его, если у вас что-то не работает, ваши проблемы. Весь смысл редхета как-то теряется.
Скоро будет RHEL6/CentOS6 — там будет новый Python.
Но в рамках текущей версии они не ломают совместимость. В этом же, кстати, причина php 5.1.
А может быть это правильно — что тупые топики обрастают минусами?
Но тоже не сильно распространенный среди профессионалов IT-сообщества.
А как донести это до провайдеров? Далеко за МКАДом только недавно IPv4 нормальный появился, а вы — IPv6!
Даже с йоты ipv6.google.com/ не открывается.
Прочитайте еще раз программу :)
в min и max хранятся индексы, а не значения.
Выполняется/выполнится*
Зато если вместо интов у нас массив строк, то это выполняится быстрее.
Именно из-за таких мнений мы должны покупать новый компьютер раз в два года, чтобы наши любимые программы перестали тормозить.
Ой, жесть :)

Но это пройдет для чисел, но не пройдет для непонятных объектов.
Ночь, пора спать :)
Чем описанное здесь отличается от приведенного мной, кроме лишней операции копирования неизвестного объекта?
Интересное решение! Увы, сегодня все еще не получается понять его :) Попробую сделать это завтра еще раз.
Поздравляю, это правильное решение, правда немного извращенное, от чего и появились «лишние» +3.

Основная идея верна — мы должны сравнить два элемента, и больший из них сравнивать с максимумом, а меньший — с минимумом. Тогда коэффициент при N получится 3/2 — на каждые два элемента мы тратим три сравнения.
Мое решение делало эту же идею, только «в лоб»:
min = max = 0;
for(i = 1; i < n; i += 2)
{
    if(a[i] < a[i + 1])
    {
        if(a[i] < a[min]) min = i;
        if(a[i + 1] > a[max]) max = i + 1;
    }
    else
    {
        if(a[i + 1] < a[min]) min = i + 1;
        if(a[i] > a[max]) max = i;
    }
}


i<n я не учитывал из практических соображений — сравнение интов происходит быстро, в то время как сравнение произвольных объектов может происходить очень долго. Но если i учитывать, то Ваше решение делает 3n/2 сравнений с i, а мое — n/2 :)
То есть? Видимо, я неверно сформулировал свою мысль:
Правильным ответом будет выкидывание -1.
Но алгоритм, который считает p как int32_t, выкинет 2.
Это уже не надуманное ограничение, а неправильный результат.
Да, Вы правы. И тут, и в моей первой программе, можно идти с 1 и сократить количество операций. Но это — не окончательная оптимизация.
Это медленнее, чем 2N.
Нет, это был ответ на
>С чего вы взяли что ответ неправильный, если при произведения порождает переполнение?
Других операций нет — в a у нас абстрактные элементы, для которых определены только < и >.
Хотя, о такой задаче для чисел с использованием других свойств я не думал.

Решение есть, и время его работы не выражается в виде 2 * n — C.
Попробуйте int32_t a[] = {INT_MAX, 2, -1}
p = INT_MAX * 2 * -1 = 2
p / INT_MAX = 0
p / 2 = 1
p / -1 = -2

Тогда, по логике, выкидывать надо 2.
INT_MAX * -1 — ну точно не правильный ответ в этом случае :)

Information

Rating
Does not participate
Registered
Activity