|
1 / 1 / 0
Регистрация: 29.12.2020
Сообщений: 51
|
|
Экономия26.01.2021, 17:42. Показов 3264. Ответов 7
Метки нет (Все метки)
При записи текста в память компьютера часто используют посимвольное кодирование, при котором на каждый символ отводится 8 бит. Но текст может содержать не
2^8 различных символов, а гораздо меньше. И тогда можно получить значительную экономию, если каждый символ кодировать одинаковым минимально возможным количеством бит. Например, если в тексте есть только буквы A, B, C и D, то каждую из них можно закодировать всего двумя битами: 00, 01, 10 и 11. Напишите программу, которая для введенной строки, состоящей только из букв латинского алфавита в верхнем регистре, определит такой минимальный по длине код, закодирует им строку и выведет на печать. Меньшей букве должно соответствовать меньшее по значению кодовое слово. Формат ввода Строка из латинских букв в верхнем регистре. Формат вывода Строка кодов наименьшей длины для букв введенной строки в том же порядке. Пример 1 Ввод Вывод ABBA 0110 Пример 2 Ввод Вывод GENERATOR 010001011001101000110100101 Пример 3 Ввод Вывод SORRY 1000010111 Примечания В задаче нельзя использовать списки, словари и сортировку. А также собственные функции и функции высшего порядка. Разберем второй пример. В слове GENERATOR используется 7 различных букв. Чтобы их закодировать, достаточно 3 бита, и кодировка букв, расположенных в алфавитном порядке, будет выглядеть так: 000 A 001 E 010 G 011 N 100 O 101 R 110 T А последний код 111 никому не достался.
0
|
|
| 26.01.2021, 17:42 | |
|
Ответы с готовыми решениями:
7
Экономия Где экономия? Где экономия? |
|
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
||||||
| 26.01.2021, 19:19 | ||||||
Сообщение было отмечено LevL123 как решение
Решение
LevL123,
2
|
||||||
|
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
|
||||||||||||
| 27.01.2021, 21:32 | ||||||||||||
Потом
0
|
||||||||||||
|
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 27.01.2021, 22:18 | |
|
gray621, в алфавите 26 букв. 26 в двоичном содержит 5 символов.
Заменяем букву на пробел и 5 символов => счетчик (число) в двоичном коде плюс слева "0" до пятисимвольной строки Потом (после цикла) определяем количество знаков в двоичном коде у счетчика "к" ; определяем "лишнее" количество нулей слева; заменяем пробел плюс "лишние' нули на "пустой" символ. Всё
1
|
|
|
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
|
||||||||||||||||||||||||||
| 27.01.2021, 23:49 | ||||||||||||||||||||||||||
|
Gdez, то есть
Но как работает
0
|
||||||||||||||||||||||||||
|
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
||||||||||||||||
| 28.01.2021, 04:26 | ||||||||||||||||
|
gray621, gray621, вот тут у "bin(k)" срезом "убираются" первые два символа
k = 5 - len(bin(k))[2:] = 7 - len(bin(k)) Первые два символа - префиксы, которые "приписываются" всем "недесятичным" числам. Попробуй
1
|
||||||||||||||||
|
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
|
|
| 28.01.2021, 08:33 | |
|
Gdez, Первые два символа - префиксы, которые "приписываются" всем "недесятичным" числам. Да, я знаю это. Просто не понял, что там не удаляешь.
Добавлено через 2 минуты Gdez, но почему 5 - длина двоичного счётчика + двоичный счетчик в 10 строчке
0
|
|
|
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 28.01.2021, 09:38 | |
|
gray621, изначально неизвестно количество уникальных символов в строке и резервируется 6 бит - один пробел и пять под максимально возможную запись числа (для этой задачи для 26).
После определения количества уникальных символов в строке становится известна длина двоичной записи: Для уникальных элементов 2 -> 1 символ 0 или 1 Для 3...4 - два символа от 10 до 11 ....... Для 17...26 - пять от 10000 до 11001 Поэтому для первого по алфавитному порядку "пишется" -> " " + "0000" + "0" = " 00000" Для третьего -> " " + "000" + "10" Для семнадцатого и выше -> " " + "1****" Для определения количества "средних" нулей используется (5 - len(tmp)) Счетчик "к" после выхода из цикла показывает максимальный порядковый номер символа в данной строке. Под него и "обрезаются" все числа с удалением пробелов
1
|
|
| 28.01.2021, 09:38 | |
|
Помогаю со студенческими работами здесь
8
Где экономия? Где экономия? Где экономия? Прагматизм экономики СССР это экономия развития СССР, в частности это экономия технического и технологического развития Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|