Допустим, нам известны три числа (x, y, z). Так вот, есть ли способ представить их, как одно число (a), но при этом обратимое в набор изначальных чисел?
Для простоты предположим, что числа являются натуральными.
>>247917707 (OP) Если взять числа 34 21 532 то их можно записать так: У первого числа две цифры, значит 234 У второго числа две цифры, значит 221 У третьего числа три цифры, значит 3532 Получается число 2342213523 Теперь его можно разобрать 2 = 34, 2 = 21, 3 = 532
Длина первого 28, длинна второго 141. Получаем 0281234098123490812093841902384141230948290348901283940819023841092384098234128934708912738940712890374089172390847018923740891720389478901273408971289037480917239804789012734
Оставь первое как есть, ко второму к каждому регистру прибавь 10, у третьего к каждому регистру прибавь 20, и сконкатенируй в 30-ичной системе счисления
>>247917707 (OP) >Допустим, нам известны три числа (x, y, z). Так вот, есть ли способ представить их, как одно число (a), но при этом обратимое в набор изначальных чисел?
Это зависит от того, что такое числа в твоём контексте. А именно, какие операции над ними будут выполняться. В зависимости от ответа можно построить изоморфизм.
>>247918471 Предлагаешь вносить длину в формате максимальной для всех чисел перед каждым из них?
>>247918617 Там кокие-то вращения пространства и группы ли, я испугался и выключил. Есть ли более простой способ понять это?
>>247918644 Вроде неплохой вариант, даже не вижу подводных
>>247918761 Ну числа натуральные, произвольной величины. Их можно складывать, умножать, возводить в степень либо делать степенью другого натурального числа.
>>247918688 Пока что самый популярный ответ, попробую найти в нём подводные
>>247918746 Например, (7;3;5) a= 735 = 105 ; Если разложить 105 на простые множители, как раз и получатся начальные числа, если важен порядок то можно записывать числа в порядке возрастания или убывания и т.п.
>>247919038 >Там кокие-то вращения пространства и группы ли, я испугался и выключил. Есть ли более простой способ понять это? По сути тот же вектор, но 4 координаты. Это четырехмерное векторное пространство над полем вещественных чисел. Видимо они под этим тоже число подразумевают. Не до конца понятно, что за число ты хочешь получить, ты не сказал. Но это в целом одно и то же. Это как если бы ты принял за a вектор из 3 компонент x, y, z. Я так понял, ты хочешь опять вещественное число получить
>>247917707 (OP) Кстати, для счётных множеств, в том числе натуральных и рациональных чисел это можно сделать, т к конечное декартовое произведение такого множества на себя (n копий одного и того же ) равномощно одной копии такого множества. Можешь погуглить диагональный аргумент.
>>247920224 Допустим есть множество пар чисел, допустим пока натуральных. его можно представить как бесконечную таблицу. 1,1 1,2 1,3 1,4 ... 2,1 2,2 2,3 2,4 ... 3,1 3,2 3,3 3,4 ... ... ... .... ... Теперь идёшь змейкой из левого верхнего угла, каждую пару нумеруешь по шагу
>>247920224 >>247920469 Так строится взаимнооднозначное соответствие между множеством натуральных чисел и множеств пар натуральных - декартово произведения на себя.
ты в любом случае не вывезешь, потому что даже нормально не можешь описать ТЗ. Тебе для мотиматики или для программирования? Какие операции ты хочешь с этими числами делать, и т.п.
>>247920646 Теперь опять берёшь пары натуральных, но второму индексу уже знаем как сопоставить 2 числа. Т е сначала одному числу сопоставляем 2 пары чисел, потом последнему числу ещё 2.
>>247917707 (OP) пусть числа x y z находятся в кубе [0,1] тогда строим число чередованием разрядов пример: x = 0,31415926535897932384626433832795 y = 0,14142135623730950488016887242097 z = 0,27182818284590452353602874713527 число = 0,312147411148522...
>>247919038 >Есть ли более простой способ понять это? Кватернион это как комплексное число, только у него три мнимых единицы вместо одной. Поэтому просто берешь свои три вещественных числа и делаешь из них один кватернион.
>>247917707 (OP) Кодирование жи. 1) Определяем количество разрядов максимально большого числа из представленных, это будет длина блока 2) Остальные дополняем нулями перед числом до длины блока 3) Люто бешено конкатенируем.
Например у нас есть чсила: 228, 14, 88, 9000 Длина блока будет 4 Дополняем остальные 0228, 0014, 0088 Конкатенируем: 0228001400889000, убираем ноль впереди - 228001400889000 - одно большое число.
Теперь раскодируем. Делим это число на длину блока, берем остаток по делению и вычитаем его из длины блока, получается 1. Это значит что надо добавить один ноль перед числом. Далее разбираем по блокам слева направо 0228 0014 0088 9000, убираем лишние нули - 228, 14, 88, 9000
>>247923014 Ну тогда банально каждый символ кодируем в двоичной системе счисления с длиной блока 4, между числами ставим блок-разделитель 1111 и тупо конкатенируем и конкатенируем. Тогда длина блока будет константой 4 при кодировании чисел любой разрядности.
>>247923374 А, бля. Сорян, я тупой. Но как вариант вначале можно добавлять 0 если первое количество чисел больше или 1 если второе количество чисел больше. Если количество чисел равно, то без разницы
>>247923744 >при раскодировании Все что у тебя есть - одно большое число. Если известно что изначально чисел всегда 4, то можно поделить длину закодированного числа на 4 и получить длину блока. А если ты изначально не знаешь сколько было чисел?
>>247917707 (OP) Формат длина-число может сработать, если перед длиной записать столько же незначащих нулей, сколько в ней порядков. Обоссывайте, если ошибся
>>247924350 Можно перед первым нулем поставить значащую цифру, например 1, а при декодировании отбрасывать ее. Сути это не меняет, но теперь наш объект можно хранить как число
>>247917707 (OP) Конечно. Посмотри, как работают архиваторы или просто хранятся файлы на диске - в виде чисел, которые можно обратить. Самое простое - возьми одинадцатеричную систему и последовательно ставь цифры своего числа, а одинадцатый символ используй как разделитель Вот тебе пример. Если совсем заморочишься - можно использовать префиксные коды, например. Вот тебе число в одинадцатиричной системе 2193492342A999234A992342, его можно пульнуть в десятичную и обратно.
>>247924346 Это же равно и 9^1^1, как числа. Ты знаешь, что тебе дано 9, и что эта была тройка, полученная по формуле x^y^z. Было это 3^2^1 или 9^1^1? Оп очевидно не хочет тройки x^y^z, где уже выделены x, y и z, так как это тоже что и тройки (x,y,z)
>>247917707 (OP) Пиздец, диванного быдла полон тред. >Допустим, нам известны три числа (x, y, z). Так вот, есть ли способ представить их, как одно число (a). Конечно есть, можно представить не только три числа, а любое n-ое количество. Называется - канторовская нумерация n-ок.
>>247925449 Какую еще биекцию. вот я просто тебе напишу 394578293084572093578423095784 и ищи в них три числа которые я придумал. не зная по какому принципу я их зашифровал ты не сможешь этого сделать просто никак. а я могу по любому зашифровать, хоть сотней способов которые мне вбредут в голову. а само знание алгоритма это по сути ключ и есть
>>247925708 Чё несешь, какое ещё шифрование? Оп где об этом спрашивал? Биекцию просил построить, вроде бы построили, даже 2 способами >>247920730 >>247920667
Ответы просто пиздец. Тред гуманитариев. Можно любое заранее известное число конечных чисел склеить. Итерируем по числам от первого до последнего и по знакам с последнего и до тех пор, пока знаки в самом длинном не кончатся, дополняем нулями. Пример: числа 1, 22, 333 превращаются в 123023003. /thread
>>247926025 >Итерируем по числам от первого до последнего и по знакам с последнего и до тех пор, пока знаки в самом длинном не кончатся, дополняем нулями. >Пример: числа 1, 22, 333 превращаются в 123023003. Не понятен алгоритм. Напиши пошагово, что ты делаешь с числами, чтобы было видно как ты получил результат.
>>247926964 Перемешивать не обязательно, но у этого есть 2 преимущества: 1. Потенциальный задел на случай решения более общей задачи на случай, когда числа могут быть бесконечной длины. 2. На случай, если мы решим заменить натуральные числа на неотрицательные рациональные. Тогда мы можем чередовать знаки до и после запятой. Например, числа 1.2, 34.5 и 6.78 можно преобразовать в 146'257'030'008.