|
|
|
[PHP] Алгоритм сжатия
|
|||
|---|---|---|---|
|
#18+
Добрый день. имеется артикул товара, довольно длинный например: 115468556456 Что не очень удобно, но такой он в каталоге. Для публикации на сайте, хотелось бы использовать короткий, но не сгенерированный случайно, сжатый оригинал. Нашел более менее алгоритм, который мне понравился Алгоритм Хаффмана (можно и Фано) Суть в том, чтобы заменять частые последовательности короткими частями, а редкие длинными. Но он кодирует все в цифры. Да и имеет ряд недостатков, в виде обязательного присутствия таблицы частот (не проблема хранить в БД) но и процент сжатия там критически мал, а то и раздует слово. Пришла в голову мысль в БД забить таблицу замен (по типу таблицы частот) например : 111 заменять на 11 157 на 12 и т.д т.е 3х символьные на 2х. Но так, чтобы ни один из полученных кодов не является префиксом другого. (11122 и что тут 11 и 12 или 11 и 22) Выходит, тоже не большое сжатие, но позволит сократить артикул ну символов на 5, что уже достаточно. Может есть более хорошие варианты? (буквы использовать не желательно, не удобно диктовать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 10:01:51 |
|
||
|
[PHP] Алгоритм сжатия
|
|||
|---|---|---|---|
|
#18+
crc32 думаю не должно иметь коллизий в случае если номеров не очень много, можно проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 10:08:20 |
|
||
|
[PHP] Алгоритм сжатия
|
|||
|---|---|---|---|
|
#18+
то есть 16, crc16... 32 выигрыша по длине не даст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 10:09:49 |
|
||
|
[PHP] Алгоритм сжатия
|
|||
|---|---|---|---|
|
#18+
Спасибо большое) То что нужно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 10:21:35 |
|
||
|
[PHP] Алгоритм сжатия
|
|||
|---|---|---|---|
|
#18+
Zhenek, Сначала проверьте не будет ли коллизий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 10:40:25 |
|
||
|
[PHP] Алгоритм сжатия
|
|||
|---|---|---|---|
|
#18+
Zhenek, у вас есть большое ДЕСЯТИЧНОЕ число запакуйте его например в 62-тиричное ))) или еще больше пример Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. если числа очень длинные, то нужно использовать расширение gmp, и переписать под него предложенную функцию. это как вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 11:39:21 |
|
||
|
[PHP] Алгоритм сжатия
|
|||
|---|---|---|---|
|
#18+
r u, Zhenek (буквы использовать не желательно, не удобно диктовать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 14:17:32 |
|
||
|
[PHP] Алгоритм сжатия
|
|||
|---|---|---|---|
|
#18+
А чем плох автоинкрементный id? Коллизии с ним невозможны, размер зависит от количества товаров в базе (а он явно меньше артикуля, иначе уникальность пропадёт), на вновь добавляемых товарах величина не увеличится резко (как это может быть с хаффманом, если строить таблицу частот по уже существующим без учёта новых, которые предугадать в общем случае невозможно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 17:30:15 |
|
||
|
[PHP] Алгоритм сжатия
|
|||
|---|---|---|---|
|
#18+
Есть подозрение, что ТС хочет иметь возможность всегда и везде привести оригинальный номер к внутреннему, в случае с автоинкрементом (который, конечно-же, прдпочтительнее) без таблицы маппинга это невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 20:26:09 |
|
||
|
[PHP] Алгоритм сжатия
|
|||
|---|---|---|---|
|
#18+
Anjey aka PMЕсть подозрение, что ТС хочет иметь возможность всегда и везде привести оригинальный номер к внутреннему, в случае с автоинкрементом (который, конечно-же, прдпочтительнее) без таблицы маппинга это невозможно.Ну так и пусть будет таблица. Более того, я бы предложил этот сгенеренный id сделать первичным ключом справочника товаров. А все артикулы хранить в отдельной табличке со ссылкой на этот id. Нередко случается, когда у одного товара несколько артикулов (например, старый и новый). А иногда, хоть и редко, бывает даже наоборот, один артикул у двух товаров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 20:42:29 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=37911716&tid=1464807]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 196ms |
| total: | 467ms |

| 0 / 0 |
