21:00 могут ли чанки быть числами в системах счисления не кратных 10, например в системе счисления 256, для более эффективного использования памяти в случае с массивом uint8
Контент очень качественный, все круто. Одна небольшая просьба: тебе не сложно сделать отдельное видео, где ты расскажешь пару слов о себе или просто дашь некоторые советы новичкам? У тебя есть опыт, поделись им, пожалуйста!
Рассказывать особо не о чем, чтобы делать отдельное для этого видео. Опыт небольшой, чтобы повествовать о каких-либо интересных и забавных случаях. А также нет никаких тайн и скрытых способов обучения, которые являлись бы советами. Всё держится на предельно простой истине - учиться, учиться и ещё раз учиться. Конечно можно было подойти ещё ко всему этому с более философской точки зрения и поставить вопрос, нужно ли обучаться ради обучения, но всё это будет скатываться к субъективности, потому что ситуации бывают разные. Единственное что можно было бы сделать в таком видео - рассказать о научной и технической литературе, которая мне понравилась и которую мог бы я рекомендовать, но частично подобное видео уже было на моём канале, а ещё одно делать, даже в отрыве от криптографии, не слишком хочется.
Максимвольное число uint16 не равно 65 536, оно равно 65 535, проверьте на калькуляторе windows, заполнив 2 байта в двоичном режиме. Диапазон от 0 до 65 535. И сдвиг 1
На примере 43:00 происходит отзеркаливание цифр (символов) в одном чанке. Это необходимо делать по причине того, что считывание символов реализовывается с конца строки (чтобы чанки вносились по порядку). В итоге, существует здесь два вида отзеркаливания: самих чанков (происходит просто при считывании символов справа-налево [поблочно]) и символов в одном чанке (происходит при помощи функции _swap). Логичнее было бы кстати функцию _swap назвать как _reverse, но когда записывал видео не обратил внимание.
@@in42u верно, если бы мы переставили цифры местами, то получилось бы совершенно другое число. Но не стоит забывать, что в теории считывание числа производилось с начала, а не с конца, как в итоговой программе. Вкратце, примерный алгоритм можно представить следующим образом, где MODULO = 1000, а входная строка = "1234567890": 1) "1234567890" // Считываем строку 2) "0987654321" // Читаем строку с конца (или же ревёрсим строку) 3) ["098", "765", "432", "1"] // Разделяем на чанки 4) ["890", "567", "234", "1"] // Ревёрсим все чанки 5) [890, 567, 234, 1] // Переводим чанки в целочисленный тип В итоговой программе алгоритм представлен немного иным образом, он работает поточно, обрабатывая каждый чанк по отдельности. 1) "1234567890" // Считываем строку _Первая итерация цикла: 2) "098" // Читаем первый чанк (чтение с конца) 3) "890" // Ревёрсим чанк 4) 890 // Переводим чанк в целочисленный тип 5) Сохраняем чанк в первую ячейку объекта BigInt _Вторая итерация цикла: 2) "765" // Читаем второй чанк (чтение с конца) 3) "567" // Ревёрсим чанк 4) 567 // Переводим чанк в целочисленный тип 5) Сохраняем чанк во вторую ячейку объекта BigInt _n-ая итерация цикла: ...
Со стороны прикладной сферы никакую, так как уже существуют готовые библиотеки для работы с большими числами куда более оптимизированные, чем предложенный вариант. К тому же, в некоторых языках программирования уже по-умолчанию существует поддержка длинной арифметики (Python, Haskell), либо существует стандартные библиотеки (как например math/big в Go). Подобные видео, связанные с алгоритмами (и криптографией в том числе) представляют из себя более научный интерес, то-есть мы исходим не из цели применения, а из цели обучения.
Это самая прикладная задача в мире, которая только может существовать. Решение проблемы длинной арифметики необходимо для устройств с малым количеством памяти на борту. Например, небольшие устройства вроде калькуляторов имеют мало памяти и не позволяют использовать большие типы данных для хранения больших чисел, соответственно все вычисления там производятся изображённым в видео способом.
Мы же считаем в столбик с концов чисел. Посчитайте в столбик на бумаге и обратите внимание, откуда мы начинаем складывать/вычитать/умножать. Начинаем с конца. Соответственно для циклов в программе нам удобнее, чтобы число было в обратном порядке в массиве.
21:00 могут ли чанки быть числами в системах счисления не кратных 10, например в системе счисления 256, для более эффективного использования памяти в случае с массивом uint8
нихуя не понятно, но очень интересно. Люблю твои видео
Контент очень качественный, все круто. Одна небольшая просьба: тебе не сложно сделать отдельное видео, где ты расскажешь пару слов о себе или просто дашь некоторые советы новичкам?
У тебя есть опыт, поделись им, пожалуйста!
Рассказывать особо не о чем, чтобы делать отдельное для этого видео. Опыт небольшой, чтобы повествовать о каких-либо интересных и забавных случаях. А также нет никаких тайн и скрытых способов обучения, которые являлись бы советами. Всё держится на предельно простой истине - учиться, учиться и ещё раз учиться. Конечно можно было подойти ещё ко всему этому с более философской точки зрения и поставить вопрос, нужно ли обучаться ради обучения, но всё это будет скатываться к субъективности, потому что ситуации бывают разные. Единственное что можно было бы сделать в таком видео - рассказать о научной и технической литературе, которая мне понравилась и которую мог бы я рекомендовать, но частично подобное видео уже было на моём канале, а ещё одно делать, даже в отрыве от криптографии, не слишком хочется.
Максимвольное число uint16 не равно 65 536, оно равно 65 535, проверьте на калькуляторе windows, заполнив 2 байта в двоичном режиме. Диапазон от 0 до 65 535. И сдвиг 1
Автор об этом прекрасно знает! Смотрите фокус 1
Можешь объяснить, в чём смысл отзеркаливания цифр в числе в чанке (на 43:00, функция swap)?
Разве мы не сами чанки должны отзеркаливать?
На примере 43:00 происходит отзеркаливание цифр (символов) в одном чанке. Это необходимо делать по причине того, что считывание символов реализовывается с конца строки (чтобы чанки вносились по порядку). В итоге, существует здесь два вида отзеркаливания: самих чанков (происходит просто при считывании символов справа-налево [поблочно]) и символов в одном чанке (происходит при помощи функции _swap). Логичнее было бы кстати функцию _swap назвать как _reverse, но когда записывал видео не обратил внимание.
@@CryptoFunIT Просто на 20:28 говорилось, что цифры в чанках не переставляются
@@in42u верно, если бы мы переставили цифры местами, то получилось бы совершенно другое число. Но не стоит забывать, что в теории считывание числа производилось с начала, а не с конца, как в итоговой программе. Вкратце, примерный алгоритм можно представить следующим образом, где MODULO = 1000, а входная строка = "1234567890":
1) "1234567890" // Считываем строку
2) "0987654321" // Читаем строку с конца (или же ревёрсим строку)
3) ["098", "765", "432", "1"] // Разделяем на чанки
4) ["890", "567", "234", "1"] // Ревёрсим все чанки
5) [890, 567, 234, 1] // Переводим чанки в целочисленный тип
В итоговой программе алгоритм представлен немного иным образом, он работает поточно, обрабатывая каждый чанк по отдельности.
1) "1234567890" // Считываем строку
_Первая итерация цикла:
2) "098" // Читаем первый чанк (чтение с конца)
3) "890" // Ревёрсим чанк
4) 890 // Переводим чанк в целочисленный тип
5) Сохраняем чанк в первую ячейку объекта BigInt
_Вторая итерация цикла:
2) "765" // Читаем второй чанк (чтение с конца)
3) "567" // Ревёрсим чанк
4) 567 // Переводим чанк в целочисленный тип
5) Сохраняем чанк во вторую ячейку объекта BigInt
_n-ая итерация цикла:
...
@@CryptoFunIT Ага, всё, теперь понятно. Спасибо за видеоуроки
...Чувак, этими действиями, какую проблему мы решаем?
Со стороны прикладной сферы никакую, так как уже существуют готовые библиотеки для работы с большими числами куда более оптимизированные, чем предложенный вариант. К тому же, в некоторых языках программирования уже по-умолчанию существует поддержка длинной арифметики (Python, Haskell), либо существует стандартные библиотеки (как например math/big в Go). Подобные видео, связанные с алгоритмами (и криптографией в том числе) представляют из себя более научный интерес, то-есть мы исходим не из цели применения, а из цели обучения.
@@CryptoFunIT ок спс ))
Олимпиадникам помощь вот зачем
@@rubiks7196 тем кто занимается спортпрогой не нужна такая длинная реализация)
Это самая прикладная задача в мире, которая только может существовать. Решение проблемы длинной арифметики необходимо для устройств с малым количеством памяти на борту. Например, небольшие устройства вроде калькуляторов имеют мало памяти и не позволяют использовать большие типы данных для хранения больших чисел, соответственно все вычисления там производятся изображённым в видео способом.
А где умножение? деление? степень? Корень? Логарифм? Тетрация?.. ну интересно ведь, а тут просто +/-
+
видос был бы тогда на 10+ часов)
@@ЕвгенийКислицин-й6д это как сделать, как подготовиться к видео, не обязательно всё разжевывать
Объясните тупому, зачем нужно записывать число в масив в обратном порядке?
Мы же считаем в столбик с концов чисел. Посчитайте в столбик на бумаге и обратите внимание, откуда мы начинаем складывать/вычитать/умножать. Начинаем с конца.
Соответственно для циклов в программе нам удобнее, чтобы число было в обратном порядке в массиве.