Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 20.10.2018
Сообщений: 104

Оптимизировать функцию

24.02.2019, 23:14. Показов 1948. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно оптимизировать (ускорить) следующий фрагмент кода?
C++
1
2
3
4
5
6
7
8
9
10
11
int F(int a, int b, int c)
{
    if (a <= 0 || b <= 0 || c <= 0) return 1;
    else if (a > 20 || b > 20 || c > 20) return F(20, 20, 20);
    else if (a < b && b < c) return F(a, b - 1, c) + F(a, b, c - 1) - F(a, b - 1, c - 1);
    else
    {
        a--;
        return F(a, b - 1, c) + F(a, b, c - 1) - F(a, b - 1, c - 1) + F(a, b, c);
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.02.2019, 23:14
Ответы с готовыми решениями:

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

Нужно оптимизировать функцию
Немножко не шарю но она должна сортировать пузырьком: #include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; int...

Как оптимизировать функцию рисования отрезка
Привет. От нечего делать решил написать функцию рисования отрезка по алгоритму Брезенхема. Использовал dev-cpp + MinGW и библиотеку...

25
0 / 0 / 0
Регистрация: 20.10.2018
Сообщений: 104
26.02.2019, 12:35  [ТС]
Студворк — интернет-сервис помощи студентам
Ivandur, спасибо! Но я туплю и не очень понимаю, как соединить этот код с вашим фрагментом
C++
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
#include <iostream>
#include <fstream>
using namespace std;
 
int F(int a, int b, int c)
{
    if (a <= 0 || b <= 0 || c <= 0) return 1;
    else if (a > 20 || b > 20 || c > 20) return F(20, 20, 20);
    else if (a < b && b < c) return F(a, b - 1, c) + F(a, b, c - 1) - F(a, b - 1, c - 1);
    else
    {
        a--;
        return F(a, b - 1, c) + F(a, b, c - 1) - F(a, b - 1, c - 1) + F(a, b, c);
    }
}
 
int main()
{
    int a, b, c;
    
    //ifstream fin;
    //fin.open("INPUT.TXT");
    cin >> a >> b >> c;
    //fin.close();
 
    //ofstream fout;
    //fout.open("OUTPUT.TXT");
    cout << F(a,b,c);
    //fout.close();
 
    return 0;
}
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
26.02.2019, 13:15
Ivandur, ваш вариант так же выполняет полный обход дерева рекурсии и никак не ускоряет вычисления. Имеет смысл сохранять уже вычисленные значения в самой функции и брать уже известные числа из таблицы. Подробнее описал это в другой теме.

Niggainsoul, ответил вам в соседней теме. Зачем еще одну создали?
0
0 / 0 / 0
Регистрация: 20.10.2018
Сообщений: 104
27.02.2019, 16:48  [ТС]
valen10, здравствуйте! Большое спасибо! Подскажите, пожалуйста, как избавиться от этих ошибок?
Миниатюры
Оптимизировать функцию  
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
27.02.2019, 17:13
Niggainsoul, похоже на конфликт имён. Возможно, где-то еще используется такое имя. Покажите полный код пожалуйста.
0
0 / 0 / 0
Регистрация: 20.10.2018
Сообщений: 104
27.02.2019, 18:15  [ТС]
valen10, вот:
C++
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
#include <iostream>
using namespace std;
 
static unsigned long long data[20 + 1][20 + 1][20 + 1];
static bool flag[20 + 1][20 + 1][20 + 1];
 
unsigned long long F(long a, long b, long c) 
{
    if (a <= 0 || b <= 0 || c <= 0) return 1;
 
    if (a > 20 || b > 20 || c > 20) return F(20, 20, 20);
 
    if (!flag[a][b][c]) {
        flag[a][b][c] = true;
        if (a < b && b < c) {
            data[a][b][c] = F(a, b - 1, c) + F(a, b, c - 1) - F(a, b - 1, c - 1);
        }
        else {
            data[a][b][c] = F(a - 1, b, c) + F(a - 1, b - 1, c) + F(a - 1, b, c - 1) - F(a - 1, b - 1, c - 1);
        }
    }
 
    return data[a][b][c];
}
 
int main()
{
    long a, b, c;
 
    //ifstream fin;
    //fin.open("INPUT.TXT");
    cin >> a >> b >> c; 
    //fin.close();
 
    //ofstream fout;
    //fout.open("OUTPUT.TXT");
    cout << F(a,b,c);
    //fout.close();
 
    return 0;
}
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
27.02.2019, 20:43
Niggainsoul, так и есть, где-то в реализации STL от MS тоже есть такое имя. Чтобы исправить, сделайте одно из этих действий (на ваш выбор):
1. Измените имя data на какое-нибудь другое.
2. Добавьте два двоеточия перед этим именем ::data[a][b][c] внутри функции, чтобы разрешить конфликт имен.
3. Перенесите using namespace std; ниже, после функции F(), перед main().
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.02.2019, 20:43

Как оптимизировать функцию сотрировки строк?
VisualStudio2012, Win7x64Prof Итак, есть массив строк типа wchar_t, которые надо отсортировать (пусть это список ФИО сотрудников)....

Нужно оптимизировать
Есть задание, есть готовый код. Но он не проходит скоростной режим, нужно оптимизировать, помогите плз) #include...

Оптимизировать код
Доброго времени суток, как можно оптимизировать код что бы он быстрее работал ? Дана последовательность из n чисел a1, a2,..., an. C...

Оптимизировать перебор
Неделю учу С++, так что прошу не гадить. Надо уменьшить время работы. Задача: Вступление — Брат мой, Магистр Ордена хочет узнать...

Оптимизировать программу
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cmath&gt; using namespace std; int main (int argc, char* argv) { ...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru