Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодирование значений бинарным способом 
V
    Опции темы
Royan
Дата 15.12.2008, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Я попытался сформулировать вопрос как можно короче, но у меня не получилось, поэтому я ключевые моменты я выделил жирным курсивом.

Положим, у меня есть некоторый набор значений характеристик чего бы то ни было, но для простоты возьмем, например, автомобильное колесо (пример надуманный поэтому не ищите в нем смысла), тогда для него могут быть перечислены следующие значения характеристик:

Код

Pirrelli
Goodyear
Michelin
15"
16"
17"
Зимняя
Летняя
Слик


Условимся также что когда я кодирую какое-то автомобильное колесо с помощью этих характеристик, то я всегда придерживаюсь следующей последовательности <марка><диаметр><тип>

Понятно, что список можно составить хоть из тысячи значений, задача формулируется следующим образом:

Каждой характеристике нужно сопоставить бинарный код, причем такой, чтобы когда из этих характеристик будет составлены конкретные модели колес, то у каждого из них не было ни одного совпадения с другими. Знаю, что непонятно, поэтому приведу пример.

Пусть я кодирую признаки следующим образом

Код

1   -   Pirrelli       (1 бит)
2   -   Goodyear       (2 бит)
4   -   15"            (3 бит)
8   -   16"            (4 бит)
16  -   17"            (5 бит)
32  -   Зимняя         (6 бит)
64  -   Летняя         (7 бит)
128 -   Слик           (8 бит)


Рассмотрим две комбинации покрышек

Pirelli 16" Зимняя в бинарном виде будет кодироваться (читаем, справа налево) так 101001
и 
Goodyear 15" Зимняя -- 100110

Теперь, основная фишка, предположим, что цены на эти колеса одинаковые - $500, поэтому когда я буду сохранять информацию о ценах на колеса я хочу поместить их одной строкой, т.е. написать не

Таблица цен на колеса
Код

101001    $500
100110    $500


А так 

Таблица цен на колеса
Код

101111    $500


Как нетрудно заметить 101111 это результат бинарного сложения 101001 OR 100110

Наконец возникающая проблема, которая возвращает к моему оригинальному вопросу. Для значения 101111 подпадает также комбинация Pirelli 15" Зимняя и Goodyear 16" Зимняя, а на них цены могут быть совсем разные. 

Как кодировать свойства покрышек так, чтобы избежать этой проблемы?

Это сообщение отредактировал(а) Royan - 15.12.2008, 18:36


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Akina
Дата 15.12.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



А никак. 
И главное - это самое "я хочу поместить их одной строкой" ЛИШЕНО СМЫСЛА.

Давай-ка лучше реальную проблему, а не какую-то там [censored] модель.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Royan
Дата 15.12.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Akina, Эта модель под собой имеет идентичную задачу. Все что я изменил это предметную область (у меня не в колесах дело). Представь, что у меня есть сотни тысяч записей в таблице в БД, 80% из них дублируют друг друга. Каждая запись в таблице сопоставлена какому-то источнику признаки которого и являются этими (в кавычках) Pirelli, 15", Зимняя и т.д. а значения и есть "цены" я хочу объединить эти записи используя вышеизложенный способ, но в силу описанной проблемы это невозможно


Это сообщение отредактировал(а) Royan - 15.12.2008, 18:52


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Akina
Дата 15.12.2008, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Royan @  15.12.2008,  19:51 Найти цитируемый пост)
я хочу объединить эти записи используя вышеизложенный способ

О господи, ЗАЧЕМ? тебе что, заняться больше нечем? 
Пойми, ты хочешь такого кодирование, которое закодирует уникальным образом любое возможное сочетание допустимых сочетаний элементов так, чтобы можно было сказать, есть в нём какое-то конкретное сочетание или нет. 
Применительно к твоему примеру - всего возможно 27 сочетаний (по 3 варианта вендора, размера и типа). Следовательно, к каждой из цен ты должен присовокупить 27-битовую маску допустимых сочетаний.
Само собой при увеличении количества как характеристик, так и вариантов каждой характеристики количество допустимых сочетаний растёт, и весьма быстро. Так что размер маски у тебя быстро превысит все допустимые пределы. А с учётом всё-таки достаточно высокой хаотичности данных эту маску даже эффективно заархивировать не получится, да плюс эффективность по времени - придётся таскать её как есть... Так что из-за того, что у тебя в таблице сотня тысяч характеристик пары десятков типов и всего сотня цен - это не повод с каждой из цен волочь битовыю маску размером в кило-мега-гига-(допишите сами)-байты...
Даже если 99% теоретически возможных сочетаний невозможны практически, и найдётся эффективный алгоритм их отсева как при кодировании, так и при расчёте номера маски, всё равно размер маски останется запредельным.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Royan
Дата 16.12.2008, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Akina, Ну тут еще такой момент, что я точно знаю количество характеристик и их никогда не будет больше 15 (при том что сейчас их в два раз меньше) поэтому вариант с нехваткой битов это не мой случай. Я всего лишь хотел узнать имеет ли изложенная мною задача решение, нет значит нет, но если да, я бы хотел узнать как к ней подступиться...


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Akina
Дата 16.12.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Royan @  16.12.2008,  01:26 Найти цитируемый пост)
я точно знаю количество характеристик и их никогда не будет больше 15 (при том что сейчас их в два раз меньше) поэтому вариант с нехваткой битов это не мой случай.

Это значит, что количество групп не превышает 15... всего лишь... но для 15 групп по 10 вариантов каждой характеристики это по петабиту на каждую из цен  smile 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Royan
Дата 16.12.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Цитата(Akina @  16.12.2008,  06:18 Найти цитируемый пост)
Это значит, что количество групп не превышает 15... всего лишь... но для 15 групп по 10 вариантов каждой характеристики это по петабиту на каждую из цен


Окей понял, вопрос снимается.



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.