|
"Пятничная" задачка, правда во вторник :) |
|
|
|
Mar 31 2009, 17:38
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Обычное мажорирование Код R = (A&B) | (A&C) | (B&C); слегка съэкономленное Код R = (A&B) | ((A|B)&C); дальше не упрощается.
|
|
|
|
|
Mar 31 2009, 18:04
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(xemul @ Mar 31 2009, 21:38)  Обычное мажорирование слегка съэкономленное Код R = (A&B) | ((A|B)&C); дальше не упрощается. Ну да... Просто было интересно послушать разные варианты...
|
|
|
|
|
Mar 31 2009, 19:24
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(xemul @ Mar 31 2009, 21:38)  дальше не упрощается. Ладно, тогда усложняем, пусть будет 5 чисел A,B,C,D,E или 7 A,B,C,D,E,F,G...
|
|
|
|
|
Mar 31 2009, 20:01
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zzzzzzzz @ Mar 31 2009, 23:55)  Алгоритм не меняется. Считайте до 5 или 7 - какая разница? Мажоритарная функция для большого количества длинна, а считать, например, сдвигом числа - довольно просто. Дергаешь флагом и все дела... дык покажите хотя бы для 3 чисел сдвигом будет лучше чем: R = (A&B) | ((A|  &C); ?
|
|
|
|
|
Mar 31 2009, 20:52
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zzzzzzzz @ Apr 1 2009, 00:30)  Лень. Пустая трата времени, имхо. Если Вам не влом, выведите мажоритарную функцию для 7 разрядов. И посмотрите на неё пристально  Вопрос в том, при каком количестве исходных данных выгодне начинать сдвигать биты а при каком пользовать AND и OR и хитрые их комбинации. Более того, существуют варианты например сдвига битов через 1(2,3 итд) через умножение, и тогда можно просто сложением всех чисел получать готовые ответы на >< на конкретных "знакоместах" Цитата(SM @ Apr 1 2009, 00:46)  А чё, собственно, экономим-то? Время? Память данных? Длину кода? LUT-ы FPGA? Или запасы воды на МКС? Остановимся на "Время?" Все остальное менее актуально...
|
|
|
|
|
Mar 31 2009, 22:13
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Apr 1 2009, 01:51)  1.Накладываем маску из 0b001001001... на каждый операнд (для случая 7-ми переменных) 2. Суммируем их 3. Сдвигаем маску. Итого число операций N*(log(N)+1), что и следовало ожидать  Это так же как вариант с умножением, те проредили биты и сложили. На самом деле просто попалась такая задачка в проекте, я ее решил частично как здесь обсуждалось и частично совсем другими средствами, но стало интересно как действовать в сходных случаях... Ну и просто задачка понравилась...
|
|
|
|
|
Mar 31 2009, 22:55
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Если правильно посчитал, то минимальная дизъюнктивная форма для функции мажорирования из N элементов будет состоять из N!/((N+1)/2)!/((N-1)/2)! дизъюнктивных групп по (N+1)/2 элементов в каждой. Т.е. для 5 элементов получаем 10 дизъюнктивных групп по 3 элемента, для 7 - 35 групп по 4 элемента. И (умозрительно) на уровне конъюнкций/дизъюнкций особо это дело не упрощается. Для подсчета количества единиц в каждом "столбце" битов более удобной может оказаться идея "вертикальных счетчиков".
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|