|
|
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
Уважаемые, прошу подсказки в следующем вопросе. Тема жизненная. Есть спутниковая антена, к ней мотор. Хочу запрограммировать алгорит поворота антены к спутнику, но поиски пока не увенчались успехом. Описание задачи: Есть к примеру четыре константных шага мотора: 0.2 0.7 1.3 2.6 Есть длинна пути равная: 86 Задача: найти сумму шагов мотора, которая максимально бы приближалась к заданной. Пример: 2.6 + 2.6 + 2.6 .... + 1.3 = 86 З.Ы. Комбинация чисел может быть любой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2010, 22:48:59 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
admiral.diver, в голову приходит только деление на цело. Попробуй общую сумму разделить на больший. Остаток на более меньший шаг. Тут будут погрешности, но они зависемы от шага. Более точный ответ, я думаю, только перебором можно определить. А нельзя найти наименьший шаг прирощения и оперировать им? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2010, 23:11:29 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
Это шутко, да? Ну возьми 430 шагов по 0.2 или 43 шага по 0.7 и 43 шага по 1.3. Вообще задача имеет счётное число решений. Любая комбинация четырёх натуральных чисел n1, n2, n3, n4 такая что 0 < 86 / (sqrt(0.2^2 + 0.7^2 + 1.3^2 + 2.6^2)*sqrt(n1^2 + n2^2 + n3^2 + n4^2)) < 1 должна быть решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2010, 23:49:23 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
Жара, моск плавится. Предыдущий мой пассаж - в игнор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 00:02:44 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
В подобного рода задачах ставят цели несколько отличные от алгоритмических. К примеру - минимизировать износ двигателя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 00:03:37 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
Воопщем вот те две крайности: максимальное количество шагов - 430 по 0.2 минимальное количество шагов - 33 по 2.6, 1 по 1.3, 1 по 0.7 между этими двумя вариантами - ещё туева хуча. Тебе все штоль нужны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 00:14:48 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
mayton, Задача описана - максимизировать точность приближения. Но кажется, что это развод на зачетную задачу =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 00:44:18 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
Это не инженерная постановка. Ибо несеръёзно всё. Лучше-бы её описывать в алгоритмических традициях. Типа там.. "Knapsack problems", "Translocation of masses" e.t.c. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 00:54:56 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
Mozokmayton, не забываем про задачу о ранце :). Очень интересный вариант решения. Посижу после работы над ним. Возможно это то что мне нужно. Собственно начальные данные представлены образно. В действительности шаг мотора описывается числом с точностью до тысячных (т.е. три знака после запятой). Почему они так сделали - хз. Задача действиетльно реальна. Если кому не вериться, могу предоставить доку по РЕСИВЕРУ. Погрешность перемешения устроит с точностью до сотых или хотя бы до десятых. Спасибо всем, кто подкинул идей. Может что еще подскажите, буду признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 12:33:24 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
Mozok, А вот я забыл =) Действительно, это именно то, что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 13:22:05 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
АльмалексияMozok, А вот я забыл =) Действительно, это именно то, что нужно. имхо, деление нацело оптимальней. ведь тебе не количество способов нужно, а один (и неужели самый оптимальный?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 13:41:26 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
если можно менять направление движения ( вращения ), то алгоритм с рюкзком не подходит например 0.5 = 0.7 - 0.2 +и что понимается под максимальным приближением ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 14:30:54 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
реализовывал такое точь в точь. Рекурсивно решай, строчек десять кода ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 14:41:23 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 15:28:40 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
не вчитался в условия задачи, вот код попроще Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 15:43:58 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
И еще немного эвристики. Отсортировать в обратном порядке. Это гарантия что в первую очередь будут использоваться самые большие шаги и дальше, если не будут найдены подходящие комбинации, меньшие шаги. list.Add(2.6) list.Add(1.3) list.Add(0.7) list.Add(0.2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 15:55:36 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
Окончательный вариант Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 16:04:36 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
CL> (defconstant stepLength (list 0.2 0.7 1.3 2.6 -0.2 -0.7 -1.3 -2.6)) STEPLENGTH > (defun dist (x y) (declare (short-float x y)) (abs (- x y)) ) DIST > (defun doStep (curLength) (declare (short-float curLength)) (loop with maxStep = (find-if #'(lambda (x) (= (dist curLength x) (apply #'min (mapcar #'(lambda (x) (dist curLength x)) stepLength)))) stepLength) return (if (> (abs (- curLength maxStep)) (abs curLength)) curLength ;else (doStep (- curLength (print maxStep))) ) ) ) DOSTEP >(dostep 46) 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 2.6000000000000001 1.3 0.69999999999999996 -0.20000000000000001 -1.3933298959045715E-14 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 18:23:31 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
код пади подлинее чем на визуал васике так "навищо платыты бильше"(с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 19:08:48 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
rstudio, чем измеряли :)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 19:11:22 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
визуально :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 19:19:36 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
если на шарпе переписать можно и побайтно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 19:19:57 |
|
||
|
Алгоритм поиска суммы
|
|||
|---|---|---|---|
|
#18+
rstudio, загони код в Ворд и посчитай символы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 19:28:27 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36679157&tid=1343597]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
8ms |
get forum data: |
1ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 465ms |

| 0 / 0 |
