powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Алгоритм сжатия
11 сообщений из 11, страница 1 из 1
[PHP] Алгоритм сжатия
    #37911700
Zhenek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

имеется артикул товара, довольно длинный например: 115468556456
Что не очень удобно, но такой он в каталоге.
Для публикации на сайте, хотелось бы использовать короткий, но не сгенерированный случайно, сжатый оригинал.

Нашел более менее алгоритм, который мне понравился Алгоритм Хаффмана (можно и Фано) Суть в том, чтобы заменять частые последовательности короткими частями, а редкие длинными.

Но он кодирует все в цифры. Да и имеет ряд недостатков, в виде обязательного присутствия таблицы частот (не проблема хранить в БД) но и процент сжатия там критически мал, а то и раздует слово.

Пришла в голову мысль в БД забить таблицу замен (по типу таблицы частот)

например :

111 заменять на 11
157 на 12

и т.д т.е 3х символьные на 2х.

Но так, чтобы ни один из полученных кодов не является префиксом другого. (11122 и что тут 11 и 12 или 11 и 22)
Выходит, тоже не большое сжатие, но позволит сократить артикул ну символов на 5, что уже достаточно.

Может есть более хорошие варианты? (буквы использовать не желательно, не удобно диктовать)
...
Рейтинг: 0 / 0
[PHP] Алгоритм сжатия
    #37911716
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crc32 думаю не должно иметь коллизий в случае если номеров не очень много, можно проверить.
...
Рейтинг: 0 / 0
[PHP] Алгоритм сжатия
    #37911721
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть 16, crc16... 32 выигрыша по длине не даст.
...
Рейтинг: 0 / 0
[PHP] Алгоритм сжатия
    #37911748
Zhenek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое) То что нужно)
...
Рейтинг: 0 / 0
[PHP] Алгоритм сжатия
    #37911793
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhenek,

Сначала проверьте не будет ли коллизий.
...
Рейтинг: 0 / 0
[PHP] Алгоритм сжатия
    #37911953
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhenek,

у вас есть большое ДЕСЯТИЧНОЕ число
запакуйте его например в 62-тиричное ))) или еще больше
пример
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// десятичное в 62-цетиричную строку
function packInt($in) {
	$a = array_merge( range(0, 9), range('a', 'z'), range('A', 'Z') );
	$base = sizeof($a);
	$h = '';
	while($in>=$base) {
		$d1 = floor($in/$base);
		$ost = $in-$d1*$base;
		$in = $d1;
		$h .= $a[$ost];
	}
	return strrev($h.$a[$in]);
}
echo packInt(PHP_INT_MAX); // 2lkCB1



если числа очень длинные, то нужно использовать расширение gmp, и переписать под него предложенную функцию.
это как вариант
...
Рейтинг: 0 / 0
[PHP] Алгоритм сжатия
    #37912256
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

Zhenek (буквы использовать не желательно, не удобно диктовать)
...
Рейтинг: 0 / 0
[PHP] Алгоритм сжатия
    #37914923
Шогал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем плох автоинкрементный id? Коллизии с ним невозможны, размер зависит от количества товаров в базе (а он явно меньше артикуля, иначе уникальность пропадёт), на вновь добавляемых товарах величина не увеличится резко (как это может быть с хаффманом, если строить таблицу частот по уже существующим без учёта новых, которые предугадать в общем случае невозможно).
...
Рейтинг: 0 / 0
[PHP] Алгоритм сжатия
    #37915124
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть подозрение, что ТС хочет иметь возможность всегда и везде привести оригинальный номер к внутреннему, в случае с автоинкрементом (который, конечно-же, прдпочтительнее) без таблицы маппинга это невозможно.
...
Рейтинг: 0 / 0
[PHP] Алгоритм сжатия
    #37915137
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anjey aka PMЕсть подозрение, что ТС хочет иметь возможность всегда и везде привести оригинальный номер к внутреннему, в случае с автоинкрементом (который, конечно-же, прдпочтительнее) без таблицы маппинга это невозможно.Ну так и пусть будет таблица.
Более того, я бы предложил этот сгенеренный id сделать первичным ключом справочника товаров. А все артикулы хранить в отдельной табличке со ссылкой на этот id. Нередко случается, когда у одного товара несколько артикулов (например, старый и новый). А иногда, хоть и редко, бывает даже наоборот, один артикул у двух товаров.
...
Рейтинг: 0 / 0
[PHP] Алгоритм сжатия
    #37916970
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Согласен, а еще бывает что у товара несколько актуальных артикулов, в зависимости от поставщика
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Алгоритм сжатия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]