Сначала вы должны сделать гистограмму своего значения. Если распределение случайное (т. Е. Каждый бит вашего счета гистограммы близок к другому), то вы не сможете кодировать более эффективно, чем двоичное представление для этого числа.
Если ваша гистограмма не сбалансирована (то есть, если некоторые значения более присутствуют, чем другие), тогда имеет смысл выбрать кодировку, которая использует меньше битов для этих значений, при использовании большего количества бит для другого - значения.
Например, если число, необходимое для кодирования, в 2 раза больше, чем на 15 бит, чем больше, вы можете использовать 16-й бит, чтобы сказать так, и хранить или отправлять только 16 бит (если он равен нулю, то следующий байт образует 16-битные числа, которые могут вписываться в 32-битное число). Если это 1, то предстоящие 25 бит образуют 32-битные числа. Вы теряете один бит здесь, но поскольку маловероятно, в конце концов, для большого количества номеров вы выигрываете больше бит.
Очевидно, что это тривиальный случай, и расширение этого более чем 2-х случаях является алгоритм Хаффмана, которые влияют на «кодовое слово», что близко к оптимум на основе вероятности чисел, чтобы появиться.
Существует также алгоритм арифметического кодирования, который тоже делает это (и, возможно, другое).
Во всех случаях нет решения, которое может хранить случайное значение более эффективно, чем то, что делается в настоящее время в памяти компьютера.
Вы должны подумать о том, как долго и насколько сложно будет реализовать такое решение по сравнению с экономией, которую вы получите в конце, чтобы узнать, стоит ли это. Сам язык здесь не уместен.
Вы кодируете биты или байты? –
привет ... в байтах! – Kreez
Я взял на себя смелость отредактировать ваш вопрос, если вы отделили код четырьмя пробелами (вы можете выбрать код в своем вопросе и нажать Ctrl + K или использовать кнопку панели инструментов редактора, чтобы сделать это для вас), он будет отформатирован и отображен как вы можете видеть в вопросе сейчас. –