Задать вопрос
  • Не открываются страницы по IP-адресу, почему?

    Frankenstine
    @Frankenstine
    Сисадмин
    Причина в том, что на одном айпи адресе может быть несколько сайтов, и только по имени и можно точно знать, какой из них запрошен.
    Ответ написан
    1 комментарий
  • Не открываются страницы по IP-адресу, почему?

    Причина 1 :
    Начиная с HTTP/1.1 (лет 15 назад) появилась поддержка мультихост серверов. На одном IP могут располагаться сотни сайтов - браузер, обращаясь к серверу по IP, обязан добавить в заголовки HTTP-запроса строку "Host:", которая позволит понять, к какому конкретно сайту Вы идете.

    В настоящее время мультихост является стандартом и нормой и подключение по IP является скорее исключением, вернее доброй волей хостера, который в отсутствие поля "Host:" выбирает за Вас какое из доменных имен предоставлять по умолчанию на данном IP.

    Причина 2:
    Все больше сайтов переходят на HTTPS. Для таких серверов соответствие доменного имени, вписанного в сертификат, уже критично заголовку "Host:", т.к. мало кто запрашивает кроме сертификата на свое доменное имя еще и сертификат на IP-адрес, который к тому же может изменяться. А современные браузеры при несоответствии полей сертификата реальному URL все чаще выдают ошибку, ограждая пользователя от подозрительного сайта.
    Ответ написан
    1 комментарий
  • Как исправить скобочную последовательность?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Если это задача такая, то я предполагаю, что там надо удалить минимальное количество скобок, чтобы последовательность стала правильной. Можно только удалять скобки, потому что вместо любого добавления скобки, можно просто вторую пару удалять. Количество действий не изменится. Правда, в ваших примерах оно удалит все скобки.

    Тут можно решать динамическим программированием. Пусть F(l,r) - минимальное количество операций удаления, чтобы сделать из строки с l по r правильную скобочную последовательность.

    База - если l..r - пустая строка - ответ 0.
    Иначе надо рассматривать варианты, что будет с последним символом. Если в конце стоит открывающая скобка, то ее надо удалить - других вариантов нет: F(l,r) = 1+F(l,r-1).

    Если же там закрывающая скобка, то есть 2 варинта: или этот символ удаляем, или берем в ответ. В первом варианте ответ такой-же, как выше. Во втором - надо перебрать, а какой же символ в строке будет открывающей скобкой для данной. Пусть это символ i (там должна стоять открывающая скобка того же типа). Тогда ответ F(l,i-1)+F(i+1,r-1) - ведь части перед парой скобок и внутри их должны тоже быть правильными последовательностями.
    Из всех вариантов надо выбрать минимальный - это и будет ответ для текущего состояния.

    Если хотите восстанвливать саму последовательность, то надо при сохранении минимума еще и сохранять в отдельном двумерном массиве - какой именно из вариантов был выбран (дропнуть последний символ, или какой символ взять ему в пару).

    Ответ к задаче - F(1,n) - для всей строки.

    Это решение потребляет O(n^2) памяти и занимает O(n^3) времени.
    Ответ написан
    2 комментария
  • Почему bool весит целый байт?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Предыдущие ораторы ( @batChar @gleb_kudr ) говорили про адресацию памяти. Я думаю, что они неправы: у нас, например, есть битовые поля, которые, по определению, могут быть отдельными битами, не смотря на то, что "байт - минимальная единица адресации в памяти". Невозможность адресовать отдельные биты памяти -- не основная причина.

    Проблема не в адресации, а скорее в стандарте: если посмотреть определение оператора sizeof (ISO/IEC 14882:1998, п.5.3.3), то стандарт запрещает применять его к битовым полям, но разрешает к типу bool (говоря, что результат, кстати, не обязан быть равен 1). А поскольку sizeof возвращает размер объекта в байтах, а конеченые объекты должны иметь ненулевой размер, то и размер bool должен быть не меньше байта.

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

    С другой стороны, у std::vector есть специализация std::vector<bool>, "булевский вектор", которая обычно требует меньше памяти, чем массив значений типа bool.
    Ответ написан
    4 комментария