|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
encodeF() я перевел на Java. Думаю сегодня я покрою его тестами. И включу в состав некого компонента который работает с файлами типа BitOutputStream. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 12:06 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
Хм... а как нам закодировать 0 ? Получается что никак? Или прибавлять везде +1 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 13:26 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
Здесь у меня бажок небольшой. Наверное по дороге от JS до Java я какие-то смыслы потерял. Код: sql 1. 2. 3.
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Код: java 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 13:33 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
Декодер отлично работает Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 14:20 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
цикл выполнялся чуть дольше. Сделал условие (len > 0), заодно len-- перенес, чтобы не дублировалось Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 14:25 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
mayton, Без массива сократить время подъема можно воспользовавшись тем, что для знакового int64 вычисление далее 106 числа (считая за первое - 1) не требуется. Тогда - 106е - 6 356 306 993 006 846 248 183 105е - 3 928 413 764 606 871 165 730 -- 69е - 117 669 030 460 994 68е - 72 723 460 248 141 -- 46е - 1 836 311 903 45е - 1 134 903 170 -- 13е - 233 12е - 144 -- За максимум 4 3 сравнения можно заметно сократить число шагов цикла вверх ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 14:35 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
С массивом, разумеется, всё проще (но полное время всё равно линейное). А вот отдельный интересный вопрос: можно ли найти количество разрядов за логарифмическое время без массива? Как известно, за О(ln N) можно найти N-е число (алгоритм fast-doubling), а здесь обратная задача - найти наименьшее число Ф., которое превосходит N ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 14:58 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
Имя пользователя1 С массивом, разумеется, всё проще (но полное время всё равно линейное). А вот отдельный интересный вопрос: можно ли найти количество разрядов за логарифмическое время без массива? Как известно, за О(ln N) можно найти N-е число (алгоритм fast-doubling), а здесь обратная задача - найти наименьшее число Ф., которое превосходит N Вообще, есть Pesano Method определения длины циклической последовательности остатков числел фибоначчи по модулю M, но я не вижу, как его к данной задаче прикрутить... Но может быть, примерно из оттуда, что-то и найдется руководящее... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 15:05 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
booby определения длины циклической последовательности остатков числел фибоначчи по модулю M, в общем, если брать формулы из фастдаблинга F 2k = F k * (2*F k+1 - F k ) F 2k+1 = F k+1 2 + F k 2 то мы за время ln(k) находим отрезок, на котором спрятался искомый номер числа, отрезок между номерами k+1 и 2k разумеется, можно пойти от чисел k и k+1, но тогда время будет линейным как бы замутить на этом отрезке деление пополам, то есть, имея на руках числа F i , F i+1 , F j , F j+1 , где, например, j > i+3, найти числа F k , F k+1 , такие что k = (i + j)/2 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 15:42 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
Имя пользователя1, ну, квадрат логарфима от фиксированной разрядности я в общем понимаю, как получить, но в конкретном случае 64-битных числе это будет по асимпотике равным секторному старту с линейным продолжением. Хотя, чем больше размерность, тем больше смысла в этом варианте. Грубо говоря, надо всего лишь знать максимальную разрядность результата в фибоначчиевом представлении. Это дает верхнюю границу степени, выше которой подниматься не надо. Дальше логариффм от деления пополам надо умножить на логарифм вычисления n-го числа фибоначчи и ожидать квадратно-логарифмического результата... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 16:33 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
booby, хотя, манипуляцией с показателями степени, вроде можно выйти на Log(M)*Log(Log(M)) вместо Log 2 (M) ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 16:45 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
booby Грубо говоря, надо всего лишь знать максимальную разрядность результата в фибоначчиевом представлении. Это дает верхнюю границу степени, выше которой подниматься не надо. Дальше логариффм от деления пополам надо умножить на логарифм вычисления n-го числа фибоначчи и ожидать квадратно-логарифмического результата... это да, очевидный вариант с квадратом логарифма) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 16:47 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
booby но в конкретном случае 64-битных числе это будет по асимпотике равным секторному старту с линейным продолжением. Хотя, чем больше размерность, тем больше смысла в этом варианте. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 16:51 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
Имя пользователя1, я когда-то, может года два назад (не помню точно), выкладывал Кнуто-Степанов код логарифмического нахождения n-го числа фибоначчи путем возведения в n-ю степень порождающей матрицы (есть вариант с порождающей парой вместо матрицы) на pl/sql в оракловой ветке сайта. Дальше идея простая - берем разряд-середину, за логарифм вычисляем значение и определяем направление движения - лево-право, делением пополам определяем следующюю степень - допустим большую, тогда получить следующее число можно умножением текущей матрицы на порождающую, возведенную в разницу текущей и следующей степеней. Для движения влево надо модифицировать код так, чтобы кроме матрицы результата на руках была матрица половинной степени. Как-то так пока думаю. Можно тупо получать фисло фибоначчи на каждый исследуемый разряд. Тогда просто квадрат логарифма ждем... PS Могу поискать ссылку на тот код, если интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 17:03 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
Не согласен. Я ищу идеальное кодирование (компактное) целых чисел в потоке бит. Действующее ограничение в 64 бит выбрано сознательно чтоб не уходить в оценки пределов. Это конешно интересно для математики но у меня прикладная задача. Я просто сам для себя решил что 64 бит - это те самые границы файла (современной файловой системы) в рамках которой я буду кодировать offsets, length e.t.c. Что еще я не рассмотрел но хотел бы добавить к сравнению. BCD - арифметика. Все знают. 4 бита на десятичный символ. Variable-Int - кажется Google protobuf ее использует. Коды Левинштейна и им подобные. Мне по сути надо решить что на диапазоне 64х бит компактнее и легче к кодированию. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 17:08 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
mayton, я чуть выше выложил encodeF с поправками ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 17:22 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
Имя пользователя1 mayton, я чуть выше выложил encodeF с поправками Благодарю. Работает. Вот моя адаптация. Где-то я схитрил со StringBuilder. Чуть позже я уйду от строк вообще. Или просто оставлю их как техническое демо. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 17:31 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
код вычисления числа фибоначчи на pl/sql за логарифм, который я упоминал в своём посте лежит здесь: https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=461297&msg=20638199 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 18:02 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
Чорт. Некрофильский топик я поднял. Ладно. Репостну сюда. Золотое сечение такой точности можно задать в PLSQL/number. А как быть с double? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 18:09 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
mayton, в чем точно вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 18:20 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
Wiki пишет о формуле Бине которая приближенно вычисляет n-е число Фибоначчи. Можем-ли мы использовать эту формулу для сокращения числа итераций? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 18:30 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
mayton Wiki пишет о формуле Бине которая приближенно вычисляет n-е число Фибоначчи. Можем-ли мы использовать эту формулу для сокращения числа итераций? мой код под спойлером, а в ремарке перед спойлером я задаю вопрос по поводу именно вычисления на базе формулы Бине. Автор лишь немного подкрутил прямую формулу. Меня интересовал ход мысли, как точно человек дошел до показанного им варианта. "быстрое" вычисление в любом случае основано на вычислении степени, и под спойлером оно (вычисление) целиком стоит на целых числах. Я забыл, что полноматричного варианта не поместил туда, а только вариант на порождающей паре. Особенность на паре такая - вычисляется всегда два числа фибоначчи, а в качестве результата отдается одно из них. Матричный вариант вычисляет четыре числа фибоначчи, это может быть полезно в каких-то алгоритмах. У Степанова, в обеих книжках кажется, матричный вариант подробно разобран. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 18:40 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
этот пост создан ошибочным движение руки, случайно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 18:41 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
По поводу Степанова - спасибо. И ведь есть эта книжка. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2020, 18:42 |
|
Тяпничный код Фибоначчи
|
|||
---|---|---|---|
#18+
mayton Где-то я схитрил со StringBuilder. Чуть позже я уйду от строк вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2020, 10:34 |
|
|
start [/forum/topic.php?fid=16&msg=39995330&tid=1339743]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
163ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 239ms |
total: | 506ms |
0 / 0 |