• Почему в оценке сложности алгоритма log n пишется без основания?

    @Dalp
    O(n)-это очень примерная оценка сложности алгоритма. В частности она отбрасывает все константы. Из курса алгебры:
    logan = (logbn)/(logba), logba-константа и её отбрасывают.
    Как видно из этого выражения, основание логарифма в оценке O(n) не имеет смысла.
    Однако чаще всего основание-2.
    Ответ написан
    Комментировать
  • Как добавить другой элемент в двумерный массив?

    @Igorr2121212 Автор вопроса
    Я понял. Я код неправильно расписал. Я новичек и баран добавил условия
    Ответ написан
    Комментировать
  • Как реализовать наследование в данной задаче?

    @NSpartak
    Можно так:
    internal class Soldier
    {
        public virtual string Attack() => "Shoot from gun";
    }
    
    internal class CoolerSoldier : Soldier
    {
        public override string Attack() => base.Attack() + " and throw a grenade";
    }
    
    internal class ManInBlack : Soldier
    {
        public new virtual string Attack() => "Shoot from blaster";
    }
    
    internal class ManInBlackBoss : ManInBlack
    {
        public override string Attack() => base.Attack() + " and call an army of aliens";
    }
    Ответ написан
    Комментировать
  • Как исправить алгоритм бинарного поиска правой границы?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Если в метод передаются
    left = -1, right = phrases.Count
    , то их физический смысл: left - последний элемент точно левее искомой позиции (строка там или меньше pref, или начинается с него), а right - последний элемент точно правее искомой позиции (строка там больше pref и не начинается с него).

    Это не совсем стандартный инвариант. Обычно считают, что left, это такая позиция, что ответ не может быть левее ее, а right, что ответ не может быть правее.

    Но можно и с вашим инвариантом работать. Вам надо соответсвтующим образом менять left и right, чтобы инвариант поддерживался.

    Во-первых, если left == right -2, то вы уже знаете ответ - это может быть только left+1. Эти и должно быть условие в while. Правда стоит эту позицию после цикла все-таки проверить. Вдруг все строки в массиве меньше pref.

    Далее, подсчитали вы mid, если строка там оказалась меньше pref или c него начинается, то left = mid. Ведь уже следующая позиция может оказаться искомой, а физический смысл left, напоминаю - "точно левее искомой позиции". В противном случае надо делать right = mid+1. Ведь позиция mid вполне может и быть ответом.

    Вопрос, а не зациклится ли такой алгоритм? right-left >= 3. Значит mid оказывается строго больше left. Также, поскольку у вас округление вниз, то mid < right-1, а занчит в любом случае либо left либо right сдвинутся так, что длина отрезка уменьшится. Алгоритм не циклится.
    Ответ написан
    6 комментариев
  • Как грамотно организовать код андроид Java?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    точно так же как цвет background, можно задавать и цвета.
    В res/color создаешь selector какой-то такой:
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:color="#f00" android:state_pressed="true"/>
        <item android:color="#00f" android:state_enabled="false"/>
        <item android:color="#0f0" />
    </selector>
    Ответ написан
    1 комментарий