Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2009, 20:23   #11
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Цитата:
Он чистую информацию (как массив) не сожмет.
Это как? А что такое программа в файле на диске, если не секрет? Это не информация, представленная байтовым массивом?

Архиватор просто отображает один блок информации в другой, предположительно меньшего размера. И умеет делать обратное отображение. То же самое можно сделать с любыми данными в оперативке.

У нас на работе, например, видел такую штуку в передаче информации по сети. Большие сетевые пакеты перед передачей архивируются зипом, передаются, а на другой стороне разархивируются.
Pashan вне форума Ответить с цитированием
Старый 08.05.2009, 20:48   #12
("")(Э_Є)("")
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 112
По умолчанию

Это брэд. Нет смысла сжимать числа в диапазоне 1-10. Это же сколько их должно быть, что бы возникла проблема с размером ? Да и если их "такая куча" вполне имеет смысл хранить массив на диски и мапить в оперативку, скорость особо не просядет.
("")(Э_Є)("") вне форума Ответить с цитированием
Старый 08.05.2009, 20:52   #13
("")(Э_Є)("")
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 112
По умолчанию

Алгоритмов сжатия множество, всё зависит от того, что это за данные. Если допускаются "потери" то вааще куча. Изображение - жыпиг, текст - рары всякие, логически взаимосвязанные данные - нейронные сети. Можно еще использовать GPU фишки текстурные выборки. А представление данных уходит на второй план.
("")(Э_Є)("") вне форума Ответить с цитированием
Старый 08.05.2009, 20:57   #14
("")(Э_Є)("")
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 112
По умолчанию

Да еще эти Вейвлеты
("")(Э_Є)("") вне форума Ответить с цитированием
Старый 08.05.2009, 21:14   #15
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

("")(Э_Є)(""), первоначальная цель этого топика - подумать над идеями. Возможно, изобрести велосипед. Пусть даже с рваной цепью и с колесом "восьмеркой".
А с уже существующими архиваторами, вроде как, никто тягаться и не собирался )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.05.2009, 22:35   #16
("")(Э_Є)("")
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 112
По умолчанию

Задачи решать лучше из реального мира, с "реальной" целью и при помощи адекватных средств. А бред каждый придумать может, вот например

Код:
typedef        std::list<
					std::list<
						std::list<
							std::list<MType>
							 >
						 >
  					 > 
			   MegaList;
Код:
 

std::list<MType> l;
MegaList ml;
...
MType l_arr [N] = ListToArray(l); 
MType ml_arr [N] = ListToArray(ml);
Функция обходит дерево и сохраняет его узлы в одномерный массив. Как такую штуку зашаблонить ?
("")(Э_Є)("") вне форума Ответить с цитированием
Старый 08.05.2009, 23:00   #17
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

По теме. Зачем вообще что-то хранить ?
Можно просто сгенерировать случайное число.
В примере класс NArray можно рассматривать как n-мерный массив.
Выполняются два основных условия:
- при обращении к ячейке возвращается одно и то-же значение (для каждой ячейки случайное)
- для разных экземпляров класса возвращаются разные значения.

Код:
    public class NArray
    {
        public int this[params int[] x]
        {
            get 
            {
                int k = 0;
                for (int i = 0; i < x.Length; i++)
                {
                    k = k * 10 + x[i];
                }
                Random r = new Random(seed+k);
                return r.Next(10);
            }
        }

        private static Random rnd = 
            new Random(unchecked((int) (DateTime.Now.Ticks)));
        private int seed = rnd.Next();
    }

    class Example
    {
        static void Main()
        {
            NArray a = new NArray();
            Console.WriteLine(a[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
Итого 0 байт для любой размерности.
alexBlack вне форума Ответить с цитированием
Старый 08.05.2009, 23:41   #18
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от alexBlack
Можно просто сгенерировать случайное число.
А если есть конкретный N-мерный массив, заполненный определенными значениями?
Ведь, как я понимаю, здесь предложено заполнять случайными значениями только для примера.

------------------------
------------------------
В общем, такая идея.

N-мерный массив представлен в виде одномерного (в общем, так, как обсуждали в прошлой теме).
Выделяем память под новый массив из char, размером в SIZE/2 + 1, где SIZE - размер исходного массива.
Потом нужно сделать таблицу битовых сопоставлений. Пусть у нас всего 10 возможных вариантов для элемента (например, числа от 0 до 9).
Тогда 0 = 0000, 1 = 0001, 2 = 0010...и т.д.
Каждый элемент нового массива будет таким образом хранить два элемента исходного массива.
В итоге, для массива char'ов используемая память уменьшится в 2 раза, а для массива int'ов - в 8.

Исходный массив можно удалить. Чтобы получить значение элемента, сначала получаем его "реальный" индекс в исходном массиве. Потом берем нужный элемент нового массива (реальный индекс / 2), отделяем нужные 4 бита и преобразуем в соответствии с таблицей.

Очень лень писать функцию преобразования
Но идея такая )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 09.05.2009 в 00:51.
Sazary вне форума Ответить с цитированием
Старый 09.05.2009, 01:08   #19
Парсифаль
Форумчанин
 
Аватар для Парсифаль
 
Регистрация: 28.04.2009
Сообщений: 186
По умолчанию

Я так и знал, что все сойдется на битовых преобразованиях. Сожмите еще..
Надо сжать на порядок - это цель)
Ruft ihm es zu durch alle Land', Der durch dies Wunder Gnade fand!
Hoch uber aller Welt ist Gott, Und Sein Erbarmen ist kein Spott
Парсифаль вне форума Ответить с цитированием
Старый 09.05.2009, 01:18   #20
Парсифаль
Форумчанин
 
Аватар для Парсифаль
 
Регистрация: 28.04.2009
Сообщений: 186
По умолчанию

Цитата:
А бред каждый придумать может, вот например
По Вашему я придумал бред? Если этот этюд-головоломка кажется бредом - это повод этим бредом не заниматься. Смотрите другие темы.
Ruft ihm es zu durch alle Land', Der durch dies Wunder Gnade fand!
Hoch uber aller Welt ist Gott, Und Sein Erbarmen ist kein Spott
Парсифаль вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конкурс им. Парсифаля - н-мерные массивы. Парсифаль Общие вопросы C/C++ 32 08.05.2009 02:06
Отличие высокого от низкого Shevali Помощь студентам 4 31.03.2009 20:01
Новый конкурс на форуме программистов rpy3uH Свободное общение 113 01.03.2009 16:31
Задача по Паскалю. 1 уровень сложности. Сергей1 Помощь студентам 2 19.11.2007 22:45
конкурс программистов ! (первый конкурс) Alar Свободное общение 129 18.03.2007 00:50