Заблокирован
|
||||||
1 | ||||||
Как сделать из двух чисел третье, уникальное для любой комбинации первых двух?03.07.2015, 10:25. Показов 9454. Ответов 35
Метки нет (Все метки)
Hi
Есть два числа, допустим: int a и int b, как можно их "сопряч", то есть что - то с ними сделать, что бы получить третье число, уникальное для любого набора этих А и B. Причём порядок следования A и B так же важен. То есть есть два числа: 1. Первое число (допустим типа int) 2. Второе число (допустим типа int) Нужно получить любой третье число, допустим int c, которое бы не повторяется для любых других комбинаций и последовательностей исходных чисел. Да, и самое главное, нужно это сделать с минимальным кол-вом операций, т.к. эти вычисления производятся очень и очень часто (миллиарды раз в секунду) Казалось бы, что может быть проще: int a = 3; int b = 7; взял, да умножил: int c = a * b = 3 * 7 = 21, но, если будет комбинация наоборот: int a = 7; int b = 3; результат будет тот же, а исходные данные поменялись... И т.д. и тп. Я пока вижу, как можно сделать это в три действия:
может быть есть какая то хитрая процессорная инструкция для быстрого преобразования подобных вещей? Может быть хитрый XOR или ещё что - то ?
0
|
03.07.2015, 10:25 | |
Ответы с готовыми решениями:
35
Вывести сумму двух первых чисел одномерного массива, равную сумме двух последних чисел В четырехзначном числе посчитать сумму первых двух и последних двух чисел Из двух векторов, создать третий состоящий из повторяющихся чисел находящихся в первых двух. В случайном четырехзначном числе найти сумму двух первых чисел и произведение двух последних. |
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
|
||||||
03.07.2015, 10:45 | 2 | |||||
Уникально будет только, если байты чисел объединить.
Например так:
1
|
03.07.2015, 11:14 | 4 |
Butt-Head, можете вменяемый пример привести?
0
|
Заблокирован
|
|
03.07.2015, 11:18 [ТС] | 7 |
Могу, у меня есть два числа:
Число 1: int a; Число 2: int b; Нужно получить такое число 3, которое бы было уникально для каждой из любых комбинаций a и b. допустим: a = 3; b = 7; или a = 7; b = 3; или a = 3; b = -3; или a = -3; b = 3; или a = 10 b = 77 и тд ... Любые числа. Так вот. Мне нужно как - то на основе A и B получать на каждую ихнюю комбинацию - уникальное значение какое - то, которое я буду в дальнейшем как ID использовать ...
0
|
03.07.2015, 11:21 | 8 |
Теперь понял. Решение в лоб: берете два числа, кладете их последовательно в двухинтовый буфер, берете от него md5 хэш. Будет вам уникальное значение.
0
|
Заблокирован
|
||||||||||||||||
03.07.2015, 11:23 [ТС] | 9 | |||||||||||||||
Не будет!
Добавлено через 1 минуту Ой.. это ж сколько процессорных инструкций ... Всё будет тормозить ... Мне нужн ос минимальным кол-вом операций ... А разве просто вот так не сработает:
0
|
03.07.2015, 11:26 | 10 |
Вам шашечки, или ехать? У вас фигурировало ключевое требование -- уникальность. Для хэшей уникальность доказана математически. Любое другое решение потребует строгого доказательства того факта, что не существует пары c и d, для которых значение бы совпало. Найдете такое -- хорошо. Как и сказал, предложенное решение -- в лоб.
1
|
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
|
||||||
03.07.2015, 11:28 | 11 | |||||
Butt-Head,
должно работать,вот так проверьте:
HighPredator, куда уж проще - в строку запихнуть и спец символом разделить Добавлено через 53 секунды нет.Что такое c в вашем случае?
2
|
03.07.2015, 11:31 | 12 |
Ну тоже вариант
Не по теме: Я просто за md5 потому, что такой хэш отлично парсится по значению на hex-блоки (отлично для индексации в ассоциативных массивах).
0
|
Заблокирован
|
||||||
03.07.2015, 11:37 [ТС] | 13 | |||||
Я же уже проверял и сказал, что не работает. См скрин.
А вот мой способ как раз таки работает, можете объяснить, почему вы говорите, что мой простой способ не может работать и в каких случаях?
0
|
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
|
|
03.07.2015, 11:37 | 14 |
Да,к тому-же хэш будет более универсальным решением,если условие на входные параметры поменяется.
Butt-Head, а какую вы задачу решаете?
1
|
03.07.2015, 11:43 | 16 |
А сами не видите? Ну ок, вот у вас a = 3, b = 7. Пусть есть c = 2, d = 13. Угадайте, чему равно значение по вашей формуле? Уже не уникально.
0
|
Неэпический
|
|
03.07.2015, 11:43 | 17 |
0
|
03.07.2015, 11:46 | 18 |
ИМХО, для двух отсчетов такая задача сама по себе оверхед.
Добавлено через 20 секунд Цель какая преследуется для сего?
0
|
Заблокирован
|
|
03.07.2015, 11:54 [ТС] | 20 |
Да, действительно ... :black_eye.:
Не, не оверхэд, да и потом всё на GPGPU система подлинного искусственного интеллекта
0
|
03.07.2015, 11:54 | |
03.07.2015, 11:54 | |
Помогаю со студенческими работами здесь
20
Сосчитайте, сколько четырёхзначных чисел имеют одинаковые суммы двух первых и двух последних цифр Среди чисел найти все, у которых сумма первых двух равна сумме последних двух Найти количество чисел, суммы двух первых и двух последних цифр которых различаются не более, чем на 2 Найти количество четырёхзначных восьмеричных чисел, у которых суммы двух первых и двух последних цифр равны Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |