• Как устроены хэштаблицы?

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

    Но да, если в таблицу запихать много элементов, а потом почти все оттуда удалить, то она будет большая и почти вся пустая.

    Edit:

    Эта "проблема" никак не решается. Это и не проблема вовсе. Просто хеш-таблицы работают быстрее всяких балансированных деревьев или тупо сортированного массива за счет большего расхода памяти. Это нужно знать и дальше уже решать - что вам больше подходит под вашу конкретную задачу.
    Ответ написан
    Комментировать
  • Как поставить пробел после запятой в строке?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чём же проблема?
    for (int i = strlen(sentence); i >= pos; i--) {
        sentence[i + 1] = sentence[i];
        sentence[pos] = ' ';
      }

    Должно быть
    for (int i = strlen(sentence); i > pos; i--) {
        sentence[i + 1] = sentence[i];
      }
      sentence[pos + 1] = ' ';
    Ответ написан
    Комментировать
  • Как сделать азбуку Морзе в обратную сторону?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Если нет пауз между буквами, то задача однозначно не решается:
    Например, "vz" и "3d" одинаково кодируются "...---.." ("...-- -.." и "...- --..").
    В худшем случае, неправильная интерпретация первых символов может сделать расшифровку в самом конце невозможной.

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

    Тогда надо разбить строку на отдельные "слова" - группы тире и точек, разделенные пробелами и каждую группу перевести в букву по таблице. Таблицу в идеале надо хранить в trie ("бор" по русски), но эта структура не реализована в стандартной библиотеке C++, поэтому можно воспользоваться просто std::map<std::string, char>

    Edit: Разумеется, таблица для обратного перевода должна быть отдельной переменной. Не получится смешать в одну кучу переводы и туда и обратно.
    Ответ написан
    Комментировать
  • Как исправить ошибочную генерацию чисел?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    int a[10];
    12 -ввел пользователь
    Ответ написан
    Комментировать
  • Как подключиться с существующему терминалу в Linux Ubuntu через ssh?

    saboteur_kiev
    @saboteur_kiev Куратор тега SSH
    software engineer
    Ну с одной стороны можно подключиться к tty той, предыдущей сессии, но как вы уверены, что там еще запущен "терминал"?
    Там может быть запущен процесс с программой, но если сам терминал отключен, то или программа уже умерла, или вывод куда-то перенаправлен.

    Правильные способы работы такие:
    1. запускать прогу, чтобы она писала не в терминал а лог файл, а лог файл можно просматривать из любой сессии
    2. Пользоваться экранными менеджерами - screen, tmux, которые позволяют сделать detach сессии, а потом re-attach, сохраняя виртуальный терминал
    Ответ написан
    2 комментария
  • Быстрый старт в IT с хорошей базой?

    @vism
    В офис идите опыта сперва набраться.
    В 99% процентах случаев нужно понимание бизнес задач, понимание как сделать удобно для клиента софта, общение с менеджером и командой.
    Ответ написан
    Комментировать
  • Какая сложность под капотом у сравнения строка?

    SagePtr
    @SagePtr
    Еда - это святое
    O(n) в худшем случае (если отличающийся символ находится в конце)
    Ответ написан
    Комментировать
  • Какая сложность алгоритма из блоков switch?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    O(1). У вас линейный код, циклов в нём нет.
    Ответ написан
    Комментировать
  • Как мне быть, если HP Support Assistant больше не работает в России?

    @ewgenc
    Снести его нафиг и забыть, меньше мусора в системе будет.
    Ответ написан
    Комментировать
  • Как правильно установить C на Windows 10?

    includedlibrary
    @includedlibrary
    Можно использовать wsl. Или установить MSYS2, и через его пакетный менеджер установить gcc/clang. Использовать компилятор, который идёт с Visual Studio, не рекомендую, т. к. он не поддерживает стандарт c11
    Ответ написан
    4 комментария
  • Как правильно сортировать файл?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Все правильно. Работа с файлом - на несколько порядков медленнее работы с памятью. Особенно медленен случайный доступ на hdd. Поэтому читать и писать по одному числу по разным адресам, как в сортировке, совсем медленно.

    На практике, когда стоит задача сортировать файл, файл большой и в память целиком не помещается. Поэтому его читают кусками и как-то хитрят. Но чтение всегда делают большими кусками.
    Ответ написан
    2 комментария
  • Стоит ли переводить сотрудников на виртуальные рабочие места?

    @Drno
    Эмм... Proxmox это про виртуалки... зачем их пихать по разным виртуалкам?

    Не проще 1 RDP сервер сделать... с рабочими местами
    Насчет 2хГб... зависит от количества вкладок в браузере и локальная БД у 1с или где то на сервере

    у нас вот гл буху 8гб ток тока хватает...
    Ответ написан
  • Что делать если пришлось бросить учёбу ради работы? Стоит ли идти куда-то учиться?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Нужно ли идти учиться и как совмещать это с моей работой 2/2

    Идти на заочку. На время сессии брать отпуск. Теоретически, админу вышка не нужна, но практически ни одна более-менее крупная компания не рассмотрит кандидата без вышки (да-да, тут сейчас набигут модно-стильно-молодежные, вышки не одолевшие и хором будут камлать "вышка не нужна").
    Поэтому вышку получаем на заочке.
    Кстати админы-системщики и админы-сетевики - это две большие разницы. В веб-макаки не советую - мучо трабахо, покито песо. Лучше в админы. Девушка-админ - это круто :)
    Ответ написан
    2 комментария
  • Какую сетевую библиотеку выбрать?

    Nipheris
    @Nipheris Куратор тега C++
    WinSock2 - это не библиотека, а прикладное API на Винде. Т.е. вы выбираете не между двумя библиотеками, а между апихой самой ОС, и ей же, обёрнутой в кроссплатформенный boost.asio.

    Если задача учебная, и нужно прям поработать с сокетами на низком уровне - возьмите WinSock2, это почти что ванильный Berkley Sockets. Если не нужно работать с сокетами на низком уровне - я бы взял asio. Но тогда вам придётся познакомиться с абстракциями этой библиотеки. В целом, ничего неподъёмного там нет.
    Ответ написан
    Комментировать
  • Как это упростить?

    hint000
    @hint000
    у админа три руки
    public void Update()
        {
          if(GlobalData.Skip >= 0 && GlobalData.Skip <=11)
            {
                SpriteRender.sprite = sprites[GlobalData.Skip];
            }
        }
    Ответ написан
    1 комментарий
  • Как ограничить доступ к функции DNS over HTTPS?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Включить запрет ее включения с помощью GPO, используя соответствующие Administrative Templates.
    Ответ написан
    4 комментария
  • Как ограничить копирование данных из сетевых папок, локального ПК, на флешки и внешние ресурсы?

    @TheBigBear
    СтарОдмины мы
    Много лет пользовали Стахановца
    В нем можно запретить запись на внешние носители, отслеживает все копирования-удаления - даже к себе их копирует перед удалением. Можно запретить прикрепление файлов в вэб почте. Отлична развита система отслеживания подозрительных действий, слова "ловушки".
    Правда (не знаю как в новых версиях) в нашей плохо работал "клавиатурный почерк" и распознавание речи
    Два раза ловили инсайдеров конкурентов, раз сотрудницу, сливающую данные в налоговую.
    Раз помог найти украденный ноутбук
    Сколько раз наказывали за безделье на работе - не счесть (соцсети, ютуб)
    4 года назад в компании сменился владелец.
    Приказал убрать стахановца, поменял мелкое руководство, изменил отношения в коллективе.
    Запретил штрафы - если сотрудник сделал текущую на сегодня работу - пусть делает что хочет.
    Мы вспомнили что такое "премия" за хорошую работу.
    Раз собрал сотрудников и сообщил кто конкретно в коллективе на нас "стучит" и предложил вне конфликты разбирать публично
    Вот не поверите, но на работу ходим с удовольствием
    Ответ написан
    1 комментарий
  • Правильно ли я разделил сеть на подсети?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Маска подсети занимает 16 бит, но в третьем октете есть бит, который не попадает под неё. Что мне делать с этим битом?

    Задание - конечно, бредовое. 201.111.32.0/16 - это адрес хоста, а не сети, потому что адрес имеет единичные биты в области нулевых битов маски:
    Host 11001001 01101111 00100000 00000000
    Mask 11111111 11111111 00000000 00000000

    Но к тому, что преподаватели сами безграмотны, мы уже привычные... посему попробуем интерпретировать задание так: выделение производить в подсети, в которой находится узел 201.111.32.0/16 (это подсеть 201.111.0.0/16), выделяемые подсети должны располагаться не ранее указанного адреса узла, и допускать количество хостов не менее заданного.

    Начать надо с определения минимальной маски конечной подсети.
    Хостов Маска
     170     /24
     590     /22
    1500     /21
     800     /22
     254     /24

    Далее, чтобы заполнять диапазон оптимальным образом, надо выделять подсети так, чтобы они занимали наиболее широкую возможную подсеть полностью либо по максимуму. Т.е. берём заданную границу host 201.111.32.0 mask /16 и начинаем "откусывать" требуемые подсети. С целью минимизации расхода адресного пространства мы на каждом шагу распределяем самую "широкую" из подсетей, которая укладывается в текущее место.

    Сначала определяем максимальную маску для данного узла. Это будет маска /19:
    Host 11001001 01101111 00100000 00000000
    Mask 11111111 11111111 11100000 00000000

    Значит, с данного адреса мы можем сразу распределить подсеть 3. Она будет иметь адрес 201.111.32.0/21 и занимать диапазон адресов 201.111.32.0 - 201.111.39.255, последний адрес является бродкастом.

    Теперь мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.40.0. Максимальная маска для этого узла - /21. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это подсеть 2. Она будет иметь адрес 201.111.40.0/22, займёт диапазон адресов 201.111.40.0-201.111.43.255.

    Далее мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.44.0. Максимальная маска для этого узла - /22. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это подсеть 4. Она будет иметь адрес 201.111.44.0/22, займёт диапазон адресов 201.111.44.0-201.111.47.255.

    Далее мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.48.0. Максимальная маска для этого узла - /20. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это подсеть 1. Она будет иметь адрес 201.111.48.0/24, займёт диапазон адресов 201.111.48.0-201.111.48.255.

    Далее мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.49.0. Максимальная маска для этого узла - /24. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это единственная оставшаяся подсеть 5. Она будет иметь адрес 201.111.49.0/24, займёт диапазон адресов 201.111.49.0-201.111.49.255.
    Ответ написан
    2 комментария