Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735

Нахождение числа элементарных операций алгоритма

10.11.2020, 01:40. Показов 4564. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Я не до конца понимаю, таким ли образом производят оценку алгоритма, но всё же я хотел бы произвести расчёт потребной производительности "железа" (ПК, спец. микросхемы или других аналогов) для того, чтобы исполнение среднего количества операций в некоем алгоритме укладывалось в конкретный предел времени вычислений.
Вероятно, я переборщил с конструкциями в предыдущем абзаце (), поэтому опишу иначе: существует некий алгоритм "переменной длины" (с парой рекурсивных функций, глубина рекурсии которых не может быть вычислена заранее никаким образом), то есть, с переменным числом элементарных операций; я хочу определить, видимо, частоту ядра вычислительного устройства, с которой оно должно работать, для того, чтобы уложить выполнение всех элементарных операций алгоритма в, например, пять секунд.
В общем, я хотел бы, чтобы кто-нибудь подсказал мне, как вообще считается количество элементарных операций алгоритма, если посчитать их "ручками" не представляется возможным (или это займёт месяц), и нужно ли оно мне, если есть какие-то другие методы оценки потребной производительности вычислительного устройства.
Буду весьма признателен за любую помощь и информацию!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.11.2020, 01:40
Ответы с готовыми решениями:

Определение числа операций на основе описания алгоритма
В общем, мне нужно на основе описания алгоритма вывести формулу определения числа операций в зависимости от размерности исходных данных. ...

Из какого числа равновозможных элементарных исходов состоит пространство элементарных исходов эксперимента?
Из какого числа равновозможных элементарных исходов состоит пространство элементарных исходов эксперимента: выбор одного пирожка из 9 с...

Округление используя элементарных логических операций
У меня есть следующий код Нужно переписать этот код и выполнить округление до ближайшего целого с помощью элементарных логических...

36
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.11.2020, 12:53
Студворк — интернет-сервис помощи студентам
Sindbad_M, для ускорения многих алгоритмов циклы наоборот разворачиваются - а вы предлагаете добавить накладных расходов... Я понял бы еще предвычисление значений x-1 x+1 y-1 y+1 -- и их подстановку в функции, но думаю, компилятор и так это проделает.
0
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
13.11.2020, 13:04
Ромуальд_7, что в вашем алгоритме соответствует вызову функции решения системы нелинейных уравнений?

Добавлено через 6 минут
Цитата Сообщение от vantfiles Посмотреть сообщение
а вы предлагаете добавить
Вы спросили как восемь последовательных вызовов заменить циклом, я пояснил.
Такая замена не изменяет временной сложности алгоритма. Также как и разворачивание цикла.

Цитата Сообщение от vantfiles Посмотреть сообщение
В нем каждая точка тестируется до 8 раз. В "построчном" варианте - один раз.
не каждая же. Тестируются только точки соседние с закрашенными. Это же и есть построчный поиск закрашенной области и затем обход ее в глубину.
2
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.11.2020, 13:14
Цитата Сообщение от Sindbad_M Посмотреть сообщение
не каждая же.
каждая. каждый рекурсивный вызов порождает восемь проверок.
Цитата Сообщение от Sindbad_M Посмотреть сообщение
Это же и есть построчный поиск
Вовсе нет.
1
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,907
13.11.2020, 13:14
Цитата Сообщение от vantfiles Посмотреть сообщение
Но в данном случае это как проделать?
Я имею ввиду не замену рекурсии циклом, а замену циклом восьми (почти) одинаковых строчек. Цикл по всем соседям клетки. Для того чтобы отделить логику определения соседних клеток от собственно алгоритма заливки.

Цитата Сообщение от vantfiles Посмотреть сообщение
цвет точки с номером пять проверяется из каждой из остальных точек - отсюда и восемь проверок.
1. На сложность алгоритма это не влияет.
2. Количество проверок зависит от цвета окружающих точек. Восемь проверок будет только для точки, все соседи которой ненулевые.

Цитата Сообщение от vantfiles Посмотреть сообщение
Этой избыточности можно избежать - алгоритм я приводил.
Дайте ссылку, пожалуйста.
1
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.11.2020, 13:17
Цитата Сообщение от Sindbad_M Посмотреть сообщение
Такая замена не изменяет временной сложности алгоритма. Также как и разворачивание цикла.
А зачем тогда его сворачивать? Чтобы сложнее было прочесть?
1
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,907
13.11.2020, 13:17
Цитата Сообщение от vantfiles Посмотреть сообщение
каждая. каждый рекурсивный вызов порождает восемь проверок.
Не каждая. Соседи нулевой клетки не проверяются.
1
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.11.2020, 13:17
Shamil1, придется поискать, но разумеется.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,907
13.11.2020, 13:18
Цитата Сообщение от vantfiles Посмотреть сообщение
А зачем тогда его сворачивать?
Я писал:
Цитата Сообщение от Shamil1 Посмотреть сообщение
Для того чтобы отделить логику определения соседних клеток от собственно алгоритма заливки.
1
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.11.2020, 13:21
Алгоритм выделения областей в двумерном массиве

Вот этот пост, ссылка на обзор алгоритмов и рекомендуемый мной, как опробованный мной когда-то давно на практике.
2
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,907
13.11.2020, 13:32
Алгоритм заливки работает без изменений, например, если соседей по диагонали не считать соседями, и даже для поля из правильных шестиугольников. Меняется только функция, выдающая список соседей. Поэтому этот код нужно вынести в отдельную функию. (солид)

Добавлено через 10 минут
Цитата Сообщение от vantfiles Посмотреть сообщение
ссылка на обзор алгоритмов и рекомендуемый мной, как опробованный мной когда-то давно на практике
На первый взгляд в линейном алгоритме по ссылке сравнений не меньше, чем простом алгоритме. Всё отличие - в глубине рекурсии.
1
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
13.11.2020, 16:31  [ТС]
Цитата Сообщение от Sindbad_M Посмотреть сообщение
На самом деле, не надо смешивать два разных вопроса:
А так я и не смешиваю (более подробно - чуть ниже).
Цитата Сообщение от Sindbad_M Посмотреть сообщение
А разве Матлаб это не есть С/С++ ?
И да и нет. .m-язык это интерпретируемый язык, который, как мы знаем, во всём хуже компилируемого. Ощутимо проявляется это, прежде всего, в его графической составляющей - пусть matlab и утверждает, что использует OpenGL (кстати говоря, какой? Не указано), на деле же поворот трёхмерной поверхности (всего на 90'000 узловых точек сетки) вызывает какие-то невероятные сложности, от которых "всё тормозит"; на Си, как мы знаем, с лёгкостью можно провернуть и не такое.
Цитата Сообщение от Sindbad_M Посмотреть сообщение
В любом случае, для неэффективных алгоритмов никакое портирование не решит проблем производительности при росте размера входных данных.
Вот теперь можно вернуться к началу и продолжить: мой код на матлабе я МАКСИМАЛЬНО оптимизировал до состояния "из песни слов не выкинешь". Алгоритм является максимально эффективным с точки зрения матлаба, но даст ли исполнение на компилируемом языке ощутимый прирост? Можно ли из C++ "выбить" решение системы нелинейных уравнений не за матлабовские 3-5 секунд, а за 0.5-1? Чисто теоретический вопрос, чтобы знать, стоит ли игра свеч.

Добавлено через 13 минут
vantfiles, Shamil1,
К сожалению, я предполагал, что приведение этого примера введёт Вас в заблуждение.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Можно.
Речь идёт об оценке НЕ этого конкретного рекурсивного алгоритма. Та рекурсия, которую я хочу оценить сложна, многогранна, и вызывает внутри себя ряд других "циклических" функций, количество итераций в каждой из которых неизвестно и найдено быть не может (вообще никак, точно совершенно).
Цитата Сообщение от Shamil1 Посмотреть сообщение
Максимальная глубина рекурсии - количество клеток в одной "связанной" области.
А вот это не совсем так, кстати говоря. На какой-то клетке алгоритм может начать уходить в одну сторону, "пожирая" соседние клетки, и прийти к точке, вернуться назад от которой будет невозможно; тогда рекурсия будет "подниматься" до той глубины, где будет возможно продолжение поиска. Таким образом, частой является ситуация, когда, например, алгоритм несколько раз доходит до глубины "15", после чего возвращается к глубине "1" и возобновляет поиск по другому направлению до глубины "20"; как итог - точек не менее 35, а максимальная глубина - 20. В качестве примера такой области я вижу крест.
Цитата Сообщение от vantfiles Посмотреть сообщение
Это самый простой и самый неоптимальный алгоритм.
В масштабе мой глобальной задачи, которая выполняется около одной минуты, эти несчастные "неоптимальные" 4 миллисекунды в её составе, всплывающие от трёх до пяти раз - фигня

Добавлено через 14 минут
Цитата Сообщение от Sindbad_M Посмотреть сообщение
Ромуальд_7, что в вашем алгоритме соответствует вызову функции решения системы нелинейных уравнений?
Я не до конца понял Ваш вопрос. Если Вас интересует метод вызова на языке матлаба, то вот:
Matlab M
1
2
3
4
5
6
7
8
[x1sol, y1sol, x2sol, y2sol] = solve([...
        A1*x1^2 + 2*B1*x1*y1 + C1*y1^2 + 2*D1*x1 + 2*E1*y1 + F1 == 0, ...
        (A1*x1 + B1*y1 + D1)*x2 + (B1*x1 + C1*y1 + E1)*y2 + (D1*x1 + E1*y1 + F1) == 0, ...
        A2*x2^2 + 2*B2*x2*y2 + C2*y2^2 + 2*D2*x2 + 2*E2*y2 + F2 == 0, ...
        (A2*x2 + B2*y2 + D2)*x1 + (B2*x2 + C2*y2 + E2)*y1 + (D2*x2 + E2*y2 + F2) == 0], ...
        [x1, y1, x2, y2]);%, 'Real', true); закомментировано, поскольку надстройка "Real - true" работает нестабильно
    
    x1sol = double(x1sol); y1sol = double(y1sol); x2sol = double(x2sol); y2sol = double(y2sol);
Сама система выглядит так (вставлю ссылку на свой же вопрос в другом разделе) - Аппаратное обеспечение алгоритма

По сути, вся проблема в том, что матлаб не даёт регулировать точность решения по методу Solve. Он оооочень долго что-то там делает, а потом выводит результат, порой, с точностью до тридцатого знака. На мои вопросы, вроде: "а чем тебе не нравится третий знак после запятой?" - он не отвечает. Возможно, стоило бы своими ручками составить алгоритм решения этой системы (благо, методов к этому времени скопилось дофигища), но глобальной задачей было изобретение универсального, стабильного алгоритма, работающего от любого входа, не имеющего обработчика исключений (за ненадобностью). Я создал такой алгоритм, однако возможности матлаба меня, в какой-то степени, не устраивают.
P.S. Ещё в матлабе есть метод fSolve, который работает очень быстро, однако главным ограничением использования которого является вывод только одного решения из всех возможных (ближайшего к начальному приближению). С ним ещё больше заморочек, поэтому он мне не нравится.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,907
13.11.2020, 21:10
Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
точек не менее 35, а максимальная глубина - 20
Максимальная глубина - это не сколько получилось в неком конкретном случае, а максимум того, что может получиться. Для 35 точек можно подобрать область таким образом, чтобы глубина рекурсии стала 35 (выстроить их в линию). Значит, максимальная глубина - 35, даже если в каком-то случае глубина будет 15.
1
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
13.11.2020, 23:56  [ТС]
Shamil1, а, понял Вас - рассматривается худший случай; спасибо!
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
14.11.2020, 08:54
Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
.m-язык это интерпретируемый язык, который, как мы знаем, во всём хуже компилируемого
MATLAB Coder не пробовали?
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
14.11.2020, 18:42  [ТС]
Цитата Сообщение от vantfiles Посмотреть сообщение
MATLAB Coder не пробовали?
Ох, как же с ним всё грустно... С одной стороны, matlab Help почти для каждой функции указывает синтаксис, который "матлаб умеет, но не умеет кодер", а также синтаксис, который "умеет и матлаб и кодер", а с другой, даже если сделать ровно так, как говорит "MHelp" (там прямо жирными буквами написано: "ТАКАЯ ЗАПИСЬ ПОДДЕРЖИВАЕТСЯ КОДЕРОМ ПРИ ПЕРЕВОДЕ"), кодер в самом начале скажет "неа, не буду", и на этом всё и закончится, хотя казалось бы.
Кроме того, многие из интересующих меня функций просто не могут быть переведены на Си, что весьма удручает.
В общем, как я уже говорил, всё грустно..
0
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
15.11.2020, 20:58
Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
Возможно, стоило бы своими ручками составить алгоритм решения этой системы (благо, методов к этому времени скопилось дофигища)
Так при портировании на компилируемый язык программирования, решение системы все равно придется составить самостоятельно. На мой взгляд, если вы можете написать эффективный алгоритм решения системы, стоит написать его прямо на языке Матлаба. Если алгоритм решения будет быстрым, то и в интерпретируемом Матлабе он выполнится быстро.
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
15.11.2020, 22:47  [ТС]
Sindbad_M, вообще говоря, Вы правы, конечно же, и, боюсь, что ждёт меня именно это занятие.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2020, 22:47

Оцените количество элементарных операций в приведенной ниже процедуре
Procedure N2 (n:integer); var i,j,k: integer; r: real; begin for i:=1 to n do for j:=1 to n do for k:=1 to 300 do r:=1.0; ...

Нахождение элементарных циклов в графе
Помогите пожалуйста с написание программы нахождение элементарный циклов в графе на Pascal

Определите количество элементарных операций, необходимых для выполнения следующих операторов ПАСКАЛЬ программы.
a)x:=2*a-6*(y+z) b)p:=not(a=b) and(c>d); c)p:=(a in R) and (b in P); d)if a>b then x:=0 else x:=a+b;

Нахождение приближающей функции в виде элементарных функций
Необходимо решить с математическим редактором MathCad, но нет ни исходных данных, ничего абсолютно кроме самого задания... Помогите...

Определить минимальное число элементарных операций редактирования необходимых для преобразования первой строки во вторую
Нужно написать программу которая по заданным двум строкам определяет минимальное число элементарных операций редактирования необходимых для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru