|
1 / 1 / 1
Регистрация: 11.04.2018
Сообщений: 45
|
|||||||||||
Экономия памяти при упаковке данных11.04.2018, 16:13. Показов 4621. Ответов 13
Метки нет (Все метки)
Здравствуйте, уважаемые программисты! Есть такая задача:
Задан упорядоченный целочисленный массив длины N = 1000. Значения элементов массива находятся в числовом интервале [0, 15]. Нужно написать A) функцию, которая «упаковывает» данные, т.е. размещает информацию о числах из массива, используя как можно меньше памяти. B) функцию, которая «распаковывает» данные, т.е. по информации, полученной при выполнении задания А, восстанавливает исходное состояние массива. Я написала для задания A, но не понимаю, почему не работает. Идея такая: создать массив [16] и заносить туда количество для каждого числа из заданной последовательности. Вот функция создания отсортированной последовательности:
Заранее благодарю всех за любые замечания, касающейся темы.
0
|
|||||||||||
| 11.04.2018, 16:13 | |
|
Ответы с готовыми решениями:
13
Экономия памяти Экономия памяти |
|
1 / 1 / 1
Регистрация: 11.04.2018
Сообщений: 45
|
|
| 11.04.2018, 16:19 [ТС] | |
|
Ну у меня видимо не правильно написала алгоритм, но я не понимаю как сделать по-другому, поэтому прошу помощи.
Или может быть есть какой-то другой вариант экономной по памяти упаковки данных.
0
|
|
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
|
| 11.04.2018, 16:56 | |
|
0
|
|
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||
| 11.04.2018, 16:57 | |||||||
Сообщение было отмечено valery7 как решение
Решение
Без проверок
2
|
|||||||
|
1 / 1 / 1
Регистрация: 11.04.2018
Сообщений: 45
|
|
| 11.04.2018, 17:06 [ТС] | |
|
Captain Maxee : Что это значит?
Добавлено через 3 минуты #include <algorithm> - я с этой библиотекой еще не знакома. Мне не понятно, как работает ваша программа..
0
|
|
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
|
| 11.04.2018, 17:08 | |
|
valery7, насчет 1 — нельзя возвращать указатель на локальный массив; насчет 2 — вместо
array[i - 1] на первой итерации, там будет array[ -1 ]. Забудьте. Лучше изучите код от MrGluck.
1
|
|
|
1 / 1 / 1
Регистрация: 11.04.2018
Сообщений: 45
|
||||||
| 11.04.2018, 17:18 [ТС] | ||||||
|
MrGluck, могли бы вы написать хотя бы какие-то комментарии к вашему коду?
Добавлено через 6 минут Я даже ничего не могу вывести, чтобы посмотреть ход работы. например вывести массив
0
|
||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||||
| 11.04.2018, 17:40 | ||||||||
|
Или использовать for-each loop
1
|
||||||||
|
1 / 1 / 1
Регистрация: 11.04.2018
Сообщений: 45
|
||||
| 11.04.2018, 18:45 [ТС] | ||||
|
Я знаю, что auto - это для переменных сложного типа, но что тут происходит не понятно. Добавлено через 21 минуту Добавлено через 5 минут Добавлено через 21 минуту все предыдущие вопросы отзываются, я поняла. сейчас не совсем понимаю, как работает распаковка.
0
|
||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||
| 11.04.2018, 19:15 | |||
Сообщение было отмечено valery7 как решение
РешениеЗначит мы просто заводим переменную index, которая будет отвечать за индекс текущего добавляемого элемента в распакованном массиве. И при каждом добавлении смещаем индекс на один (иначе бы записывали по одному и тому же месту). Проходимся последовательно по всем элементам из запакованной последовательности (16 раз, внешний цикл) и добавляем в результирующую последовательность элемент, равный индексу (таков формат хранения) столько раз сколько записано в запакованном массиве (внутренний цикл). Всё достаточно тривиально. Добавлено через 41 секунду Можете попробовать в отладчике по шагам походить.
1
|
|||
|
1 / 1 / 1
Регистрация: 11.04.2018
Сообщений: 45
|
||||||
| 11.04.2018, 19:29 [ТС] | ||||||
|
MrGluck, большое вам спасибо, все понятно.
Добавлено через 9 минут Только с таким представлением данных, не понимаю пока как сгенерировать массив случайных чисел. Написала вот так в main():
0
|
||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||||||
| 11.04.2018, 19:53 | |||||||||||
Сообщение было отмечено valery7 как решение
Решение
Или так:
1
|
|||||||||||
|
1 / 1 / 1
Регистрация: 11.04.2018
Сообщений: 45
|
|
| 11.04.2018, 19:57 [ТС] | |
|
Огромное вам спасибо. Я от вас узнала очень много полезных вещей.
0
|
|
| 11.04.2018, 19:57 | |
|
Помогаю со студенческими работами здесь
14
Реальна ли экономия памяти при использовании генераторов вместо массивов?
QDir и экономия памяти Экономия памяти и справочные таблицы Объявление массивов и передача их по ссылке, экономия памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|