|
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
|
|
Сокращение расстояния Хэмминга14.01.2011, 10:47. Показов 4572. Ответов 14
Метки нет (Все метки)
Добрый день, уважаемые форумчане.
Есть у меня следующая ситуация: имеем два массива одинаковой длины типа unsigned int, например arr1[2] и arr2[2] (на самом деле размерность может быть любой). Необходимо сократить расстояние Хэмминга между этими двумя наборами чисел, т.е., имеем, например, следующие числа arr1 656546345 15632489 arr2 606214697 78559272 которые в двоичном коде выглядят как arr1 0010 0111 0010 0010 0001 1010 0010 1001 0000 0000 1110 1110 1000 1000 0110 1001 arr2 0010 0100 0010 0010 0001 1010 0010 1001 0000 0100 1010 1110 1011 1000 0010 1000 Расстояние Хэмминга в данном случае - число отличающихся бит массива arr1 от arr2 (здесь оно равно 8-ми). Причем, это должен быть один или n бит, выбранные случайным образом, т.е. не обязательно менять первый отличающийся бит, это может быть и 5-й и 10-й и т.д. На ум приходит только не очень эффективный способ: взять единицу и случайным образом ее двигать влево-вправо, пока не будет найден отличающийся бит и не будет заменен на противоположный. Вопрос: можно ли как-то более эффективнее с точки зрения скорости выполнения сделать или тут без вариантов? P.S. Почему нужно оптимизировать по скорости выполнения - эта операция будет повторяться много раз, что скажется на общем времени выполнения программы.
0
|
|
| 14.01.2011, 10:47 | |
|
Ответы с готовыми решениями:
14
Код Хэмминга
Коды Хэмминга С++ |
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 14.01.2011, 10:52 | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
|
|
| 14.01.2011, 10:56 [ТС] | |
|
да, да, именно о нем и идет речь, покороче пример приведу
x1 11010001 x2 10100101 здесь расстояние Хэмминга равно 4-м, алгоритм должен менять x2, например, так x2 10000101 или так x2 10010101
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
| 14.01.2011, 12:29 | ||||||
|
Ксоркой их, единицы в результате отметят позиции..
Добавлено через 1 минуту Уменьшить метрику до нуля можно простым копирожанием.
0
|
||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||||||
| 14.01.2011, 19:36 | |||||||
|
Уменьшить метрику между числами можно с помощью простейших логических операций.
0
|
|||||||
|
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
|
|
| 15.01.2011, 08:13 [ТС] | |
|
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
| 15.01.2011, 08:38 | ||||||
1
|
||||||
|
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
|
|
| 15.01.2011, 11:07 [ТС] | |
|
Ругается компилятор:
Error 54 error C2297: '^' : illegal, right operand has type 'char *' на строку: buffer=*p1^p2;
0
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||
| 15.01.2011, 11:53 | ||||||
|
А не, был устатый. Мой пример подходит под описание задачи. Вот улучшенная версия алгоритма с добавлением вычисляемых бит. Собственно, тот же ксор, что говорил Тарас.
0
|
||||||
|
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
|
|||||||
| 15.01.2011, 12:04 [ТС] | |||||||
![]() Тут задача несколько другая - должна получится функция, которая получает на входе два массива одинаковой длины и число бит, на которое один массив (некоторая двоичная последовательность, представленная массивом чисел) будет "приближен" к другому. А на выходе второй массив, число бит которого отличается уже меньше как раз на этот самый параметр. Кстати для подсчета количества бит я нашел достаточно интересное решение в плане быстродействия:
0
|
|||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||||||||||
| 15.01.2011, 13:28 | |||||||||||
|
Ну тогда так.
Если нужно менять только один массив.
1
|
|||||||||||
|
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
|
|||||||
| 16.01.2011, 13:14 [ТС] | |||||||
|
Добавлено через 15 часов 22 минуты вообщем, в итоге вернулись к моей изначальной идее, видимо, более быстрый путь найти сложно
В любом случае спасибо за проявленное внимание и потраченное время
0
|
|||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||
| 16.01.2011, 13:21 | ||||||
0
|
||||||
|
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
|
|
| 16.01.2011, 13:25 [ТС] | |
|
конечно же, сдвиг тут максимально может быть на 32 осуществлен, ошибочка вышла
0
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||
| 16.01.2011, 21:38 | ||||||
|
Хм. Так рандома можно и не дождаться. А что, если расстояния уже нулевые?
0
|
||||||
| 16.01.2011, 21:38 | |
|
Помогаю со студенческими работами здесь
15
код Хэмминга Последовательность Хэмминга Код Хэмминга Декодер Хэмминга Последовательность Хэмминга Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|