Комментарии 16
1. У вас нет четкого определения вашей конкатенации.
Например, для чисел вполне очевидно, что 1 || 23 != (1*10+23).
Вот и получается, что речь идет не о конкатенации, а о «приписывании цифры справа». Довольно сомнительной интересности операция.
2. А как конкатенация ведет себя с другими операциями? (очень плохо, в плане всяких там дистрибутивностей).
3. Вся полезность вашего подхода по переводу между системами счисления нивелируется необходимостью операций в этой системе счисления. Грубо говоря, вот вы хотите перевести число 90 из десятичной в систему счисления с основанием 7. По вашему алгоритму нужно посчитать (9*10)+0, что в сс7 12*13. И как это считать? Столбиком, с таблицей умножения в сс7?
Например, для чисел вполне очевидно, что 1 || 23 != (1*10+23).
Вот и получается, что речь идет не о конкатенации, а о «приписывании цифры справа». Довольно сомнительной интересности операция.
2. А как конкатенация ведет себя с другими операциями? (очень плохо, в плане всяких там дистрибутивностей).
3. Вся полезность вашего подхода по переводу между системами счисления нивелируется необходимостью операций в этой системе счисления. Грубо говоря, вот вы хотите перевести число 90 из десятичной в систему счисления с основанием 7. По вашему алгоритму нужно посчитать (9*10)+0, что в сс7 12*13. И как это считать? Столбиком, с таблицей умножения в сс7?
Вся полезность вашего подхода по переводу между системами счисления нивелируется необходимостью операций в этой системе счисления. Грубо говоря, вот вы хотите перевести число 90 из десятичной в систему счисления с основанием 7. По вашему алгоритму нужно посчитать (9*10)+0, что в сс7 12*13. И как это считать? Столбиком, с таблицей умножения в сс7?Да. При этом умножение/сложение намного проще деления. Но нам и действий нужно выполнить гораздо больше, чем в классическом переводе через деление столбиком. В-общем, необходимы O(n) — оценки, чтобы понять, имеет ли какую-то полезность предложенный алгоритм (возможно, что и нет).
Я бы не стал считать О. Просто прикиньте сколько вам нужно памяти для перевода из 2000-ичной системы счисления в 257-ичную. И это только из одной «произвольной» в другую «произвольную».
Просто прикиньте сколько вам нужно памяти для перевода из 2000-ичной системы счисления в 257-ичнуюА в чём проблема? Ради максимальной скорости алгоритмы математических пакетов для чисел произвольной длины работают с 232 или с 264-ричными системами. 1 цифра — 1 DWORD/QWORD. Если цифра помещается в int, как в случае с 2000-ичной системой, с ней работать не сложнее, чем с 10-тичной.
Не для представления чисел, а для таблиц, на которые опирается автор метода.
1. Нужна таблица в которой будут представления всех 2000 цифр в 257 системе.
2. Нужна таблица умножения для 257 системы счисления.
1. Нужна таблица в которой будут представления всех 2000 цифр в 257 системе.
2. Нужна таблица умножения для 257 системы счисления.
257 системе счисления — будет 256 чисел.
В целом нужно просто понять какие системы нам нужны и уже из это исходить.
В целом там не получается каких-то безумных размерностей в данных
В целом нужно просто понять какие системы нам нужны и уже из это исходить.
В целом там не получается каких-то безумных размерностей в данных
Вы легко можете представить число 1234567890 в десятичиной системе или 123456789ABCDEF0 в 16-ричной. Вот возьмем такое число в 2000-ричной: цифры
1, 2, 3,…, 1999, 0. Для ваших вычислений нужно каждую цифру перевести в 257-ичную, а значит в первой таблице будет 2000 чисел в 257-ичной.
Дальше я бы хотел узнать как вы будете умножать два числа в 257 сс, без таблицы умножения 257 на 257.
Вот и получается, что как-то очень много памяти.
1, 2, 3,…, 1999, 0. Для ваших вычислений нужно каждую цифру перевести в 257-ичную, а значит в первой таблице будет 2000 чисел в 257-ичной.
Дальше я бы хотел узнать как вы будете умножать два числа в 257 сс, без таблицы умножения 257 на 257.
Вот и получается, что как-то очень много памяти.
Например, для чисел вполне очевидно, что 1 || 23 != (1*10+23).
Да. Просто так делать нельзя. Сама идея, что число любое число состоит из конкатенированных цифр. Т.е. 23 (например в десятичной системе) это 2‖3. Т.е. в описанном вами случае будет 1‖2‖3. В противном случае действительно ничего не сходится. Т.к. операция применяется не правильно.
Вы же сами пишете, что конкатенация ассоциативна, значит 1||2||3 = 1||(2||3) = 1||23.
У вас для каждого основания счисления получается разная конкатенация. Этакое параметризованное семейство бинарных операций
Вы читали главу из Кнута про перевод между системами счисления? Там тоже только умножения и сложения. Написано короче и проще.
a ‖ b = (a * 10) + b - верно только в случае если это b >= 0 и b < 10.
В общем случае десятичной системы a ‖ b = a * 10 ^ [lg(b)] + b,
где [ ] - целая часть числа.
Аналогично для других систем счисления, будет множитель и основание логарифма меняться.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Алгебраическая конкатенация и её возможности по переводу чисел между системами счисления