Можно ли сжать случайный URL
https://a.scdn.gr/images/sku_main_images/014650/14650949/20180416114151_amd_ryzen_5_2600.jpeg
в гораздо меньший текст, как этот?
ta7f^*(GD&FY6FTGsdfsfYHU(*
Если бы вам приходилось иметь дело с миллионами URL, которые разделяют какую-то часть, как бы вы их сжали?
https://a.scdn.gr/images/sku_main_images/014650/14650949/20180416114151_amd_ryzen_5_2600.jpeg
https://a.scdn.gr/images/sku_main_images/014650/14650949/20180416114151_amd_ryzen_5_2700.jpeg
https://a.scdn.gr/images/sku_main_images/014650/14650949/20180416114151_amd_ryzen_5_2700x.jpeg
...
Мой способ будет:
- Сделать счетчик base-256.
Base-10 может считать до 9999 с 4 цифрами.
1 байт может представлять 256 символов
Base-256 может считать до 4 294 967 296 с 4 цифрами.
- Разбейте каждый URL на части и проиндексируйте его, используя base-256.
Например, "http://" находится под номером 0 ," a.scdn.gr"находится под номером 56762835 , который представлен как % & r в base-256.
- Сохранить каждый URL как последовательность индексов.
Например,
https://a.scdn.gr/images/sku_main_images/014650/14650949/20180416114151_amd_ryzen_5_2700.jpeg
преобразуется в 7 частей:
0/&^T/&^Y/&^e/*JE/(E*U/*EHG
Мне нужно будет сделать 7 отдельных выборок частей, но мне все равно, поскольку я буду выполнять критическую обработку для нескольких URL-адресов одновременно, проблема заключается в их хранении.
Я сохраню миллион раз текст " & ^ T / " и один раз текст " index: & ^ T, content: a.scdn.gr/" вместо сохранить миллион раз текст " a.scdn.gr / "
~ 50% сжатия.
* 1 058 * * Пример 1 059 *
1 байт
8 бит
256 символов
base-10: 1943 = 0x10 ^ 4 + 1x10 ^ 3 + 9x10 ^ 2 + 4x10 ^ 1 + 3x10 ^ 0 = "1", "9", "4", "3"
base-256: 1943 = 0x256 ^ 3 + 0x256 ^ 3 + 0x256 ^ 2 + 7x256 ^ 1 + 151x256 ^ 0 = "$", "*" ($ = 7, * = 151)