|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Имя пользователя1 labarad, В худших случаях по прежнему 5*N, хотя таких кейсов намного меньше Надо будет преодолеть лень и самому попробовать модифицировать код, чтобы получить практический результат. Исхожу из предположения, что число переходов может сократиться с 4N до 2N для больших N: 1N - последовательно по кругу от нуля к нулю + 1N - возврат к голове. Но даже в этом (худшем) случае оптимизация с 4N до 3N - это 25%-ый прирост производительности и стоит прилагаемых усилий. Худший случай: каждый следующий ноль находится на расстоянии большем (x+1), чем путь (x) от первичной точки до текущего нуля. Единственный вопрос: стоит ли считать операцию сравнения как дополнительную, сравнимую с переходом из вагона в вагон? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 15:36 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Имя пользователя1, Поразмыслил более предметно. Вынужден согласиться с Вашей оценкой в 5N. 2N добавляет финальная проверка на хвост (голову). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 20:34 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
К задаче классификации натуральных на (х 2*х 3*х ... К*х). Сделал проверку для К=10(только) можно экспериментировать с подбором к-тов (правда универсальную для лбого К делать это долго и муторно, но нарастить довольно быстро, ну и МЛ никого не заинтересует) Код: 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. 57. 58. 59. 60. 61. 62. 63. 64.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 22:19 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Немного подрихтовал, чтобы можно было безболезненно проверять комбинации для К=[7; 10]. Вроде менял только вот это: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Код: 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. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.
У кого есть опровергающий пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2020, 15:45 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Сделал с постоянным кол-вом циклов ("почти универсально") для K=(7:11), можно и 12 и больше, но полноценная проверка всё равно отсутствует. Комбинации вычетов создаёт универсально. Но проверки делает универсально только для х*p, где р - простой делитель размерности задачи К. Проверки типа х*p1*р2... - по-прежнему как в старом варианте - больше неохота с этим возиться. снова целиком: Код: javascript 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. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2020, 20:47 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Хорошую задачку сегодня задали: Есть 100-этажный дом и 2 яйца. Нужно найти этаж, начиная с которого яйцо при падении разбивается. Какое минимальное количество итераций для этого потребуется? Я ее решил в том смысле, что понял принцип и нашел правильный ответ. Но в общем виде формулу не выводил, можно это рассматривать как бонус :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 18:15 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
это классика ) в общем виде вопрос лучше ставить наоборот: сколько максимум этажей можем проверить на разбиваемость, если есть K яиц и лимит на N бросков. S(k, n) = S(k-1, n-1) + 1 + S(k, n-1) то есть первый бросок проверяет некоторый этаж где-то "посередине". Если разбилось, то окучиваем всё что ниже, S(k-1, n-1) штук, поскольку осталось k-1 яиц и n-1 бросков. Если не разбилось, то S(k, n-1) этажей сверху. ну и по индукции легко доказать явную формулу (если нигде не напутал) используя тождество C(a, b) = C(a-1, b) + C(a-1, b-1) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 18:32 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Соколинский Борис, Нужно найти минимум функции f = 100/n + n - 1, где n может принимать значения от 1 до 50. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 20:03 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
iOracleDev, поправка, плюс остаток от целочисленного деления 100%n ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 20:07 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Брутфорс - идём с 1 этажа вверх и кидаем. Как только разобъется - нашли. Оптимизация этого брутфорса - найти удачное начальное приближение. Желательно с запасом в 1-2 этажа. Первый бросок - пристрелочный. Второй - доказательство правоты. Для улучшения КМК можно вспомнить физику Ньютона. Как там с падением. И как разбивание яйца зависит от высоты. В практике оно должно разбиться уже на 1 этаже но мы берем яйцо математическое. Тоесть возможно оно гораздо твёрже. У ньютона кажется при одинаковом ускорении свободного падения скорость растет квадратично. Тоесть формула должна иметь вид квадратного корня. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 20:14 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Нужно найти минимум функции f = 100/n + 100%n + n - 1 2 n от 1 до 50, % - ремайндер оператор. PS: ответ соответственно n = 10, а итераций 18 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 20:16 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
iOracleDev, Можно меньше ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 20:29 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Соколинский Борис, этажи для первого яйца: 1, 12, 25, 37, 48, 58, 67, 75, 82, 88, 93, 97, 100 (от 100 назад через 3 на первом шаге, + 1 на каждом следующем.) если на первом этаже яйцо точно не бьется, то 13 для всех кроме случая попадания на 100, тогда 14 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 21:53 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
booby, если разобьется на 25, то 15. Идея присутствует, но нуждается в рихтовке. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 22:07 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
авторесли на первом этаже яйцо точно не бьется формулировка кривая, но лучше не сумел сказать. если бы было известно, что на первом шаге точно не бьется, его можно было бы и не бросать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 22:11 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Соколинский Борис, мне лень рихтовать, - это неравномерный поиск. я ему практически полезного применения с разбегу не вижу. Ой, а можно было дать три яйца и получить другую схему. Интереснее было бы почувствовать, где и как такие последовательности появляются в реальных задачах. я пока не могу сообразить хорошего применительного случая. ----------- когда шел с обратной стороны, получалось 1, 14, 25... но что что-то не срослось и побежал назад от ста. от ста. может оно и с обеих сторон не сходится - тогда я не знаю как правильно сращивать поход слева с походом справа. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 22:17 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
booby, собственно да, в обе стороны на "пару" не сходится. предпоследний шаг надо "рихтовать". я пока не понимаю, как это назвать и что это значит... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 22:31 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
booby, 1, 14, 26, 37... и далее по предыдущему списку ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 22:42 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Соколинский Борис iOracleDev, Можно меньше В принципе идея понятна, сохранять постоянное количество итреаций и найти минимум стартового интервала. 15 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
14 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
13 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Как выразить простой формулой не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 22:59 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
докрутилось и сложилось в пазл: сумма 1+2+3+4+5+6+7+8+9+10+11+12+13+14=105 Поэтому уменьшаем пять правых слагаемых на единицу каждый: 1+2+3+4+5+6+7+8+9+9+10+11+12+13=100 так получаем число элементов в слоте завершение раскладки должно быть таким: слот старт до штук в слоте13100- 1129899211959731091944986905880856773797665728556649447559337461022636111142512011313 Первый бросок делаем в слот 1 по его левому краю - 14 если шар разбился, идем в предыдущий слот со вторым шаром и шагаем по не посещенным этажам, если нет, продолжаем в следующем слоте с первым шаром, и бросаем с левого крайнего (нижнего) этажа слота. последовательность бросков первого шара 14,26,37,47,56,65,73,80,86,91,95,98,100 PS что там рассказывают про "динамическое программирование"? PS2 что-то лихо в правых (верхних) двойках запутался... (;; ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 04:11 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
booby последовательность бросков первого шара 14,26,37,47,56,65,73,80,86,91,95,98,100 В случае яиц шаров алгоритм понятен, а вот с тремя уже не очень. Объяснения под спойлером не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 10:11 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Я сделал то же самое но с другого конца, проверяя гипотезу, что например 15 это минимальное число итераций, первый шаг проверка на 15 этаже, если первое золотое яичко разбилось, то проверяем с первого по 14, соответственно худший случай это 15 итераций, далее чтобы не ухудшить количество итераций (одну мы уже сделали), следующий шаг 14 (29 этаж) это вторая итерация, если яйцо разбилось, то нужно проверить 13 этажей, получаем 13 + 2 итераций (2 - предыдущие уже сделанные итерации) и так далее, получается каждый следующий шаг для условия непревышения заданного количества итераций уменьшается на единицу. У вас сколько минимум получился? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 16:08 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Соколинский Борис Объяснения под спойлером не понял. Попробую "разжевать") Итак, у нас в запасе K яиц, ограничение на N бросков. Какова максимальная высота дома, чтобы мы с такими ограничениями могли выяснить, с какого этажа разбивается яйцо. Ну или вообще не разбивается. Искомую функцию максимальной высоты обозначим как S(K, N) 1) Более простой кейс - яиц бесконечно много (или хотя бы не меньше чем N), в общем, их экономить не надо и мы ориентируемся только на броски. Очевидно, наилучшая стратегия - поиск делением пополам. Бросаем со среднего этажа, если разбилось, надо проверять нижнюю часть, с лимитом N-1, иначе верхнюю часть, тоже с лимитом N-1, потому что один бросок уже сделан. Тогда получается S(N) = S(N-1) + 1 + S(N-1) S(0) = 0 что дает S(N) = 2 N - 1 2) Если вернуть в игру К, то поиск немного "перекособачивается". Если на первом броске яйцо разбилось, то для проверки нижней части будет K-1 яиц и N-1 бросков. Если не разбилось, то для верхней части имеем K яиц и N-1 бросков. Формула будет аналогичная: S(K, N) = S(K-1, N-1) + 1 + S(K, N-1) S(0, N) = S(K, 0) = 0 В принципе, можно считать по этой формуле, можно переделать в явный вид, но для общего случая там сумма биномиальных коэффициентов, в для конкретных K - полином от N например, если 2 яйца, то S(2, N) = (N 2 + N) / 2 для 3 яиц S(3, N) = (N 3 + 5*N) / 6 и т.е. Например, 100 этажей. если 2 яйца, то за 13 бросков можем проверить максимум 91 этаж, за 14 будет 105 этажей, то есть 14 достаточно если 3 яйца, то 8 бросков проверяют 92 этажа, 9 бросков хватит на 129, то есть надо 9 бросков. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 16:39 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
Имя пользователя1 А как для произвольных (K, N) должен выглядеть алгоритм обхода? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2020, 12:35 |
|
Относительно простые задачки
|
|||
---|---|---|---|
#18+
авторА как для произвольных (K, N) должен выглядеть алгоритм обхода? вероятно таким: 1) строишь возвратную последовательность для K 2) выравниваешь её на фактическое N 3) кладешь M = N - это число не обследованных шаров 4) шагаешь по полученной возвратной последовательности обратным ходом, сохраняя номер броска в переменной i, на каждом шаге уменьшая M: M=M-1 5) отыскиваешь i, на котором разбился первый шар 6) Если M=0 To Стоп 7) присваиваешь - K=K-i, N = (Число_элементов в слоте_предшествующем_i - 1), M = N 8) GOTO 1 Но интереснее было бы увидеть пример практической ценности. Генераторы случайных чисел? - не похоже, - здесь явно пирамидально закошеный поиск. Хде, хде его применимость, какие ленты с барабанами по нему плачут? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2020, 15:24 |
|
|
start [/forum/topic.php?fid=16&msg=39932396&tid=1339678]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
163ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 241ms |
total: | 519ms |
0 / 0 |