Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оценка априорной и апостериорной сложности проги 
:(
    Опции темы
Гость_Женя
Дата 15.1.2006, 18:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











всем приветы! кто-нибудь может пдсказать априорнуюи апостериорную временные и ёмкостные сложности следующей программы:
Код

     #include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;

typedef long long ll;

ll f[16];
ll a[16];

int d,n,m;

ll m1[16][16];
ll m2[16][16]; 
ll m3[16][16];

void umnmat(ll m1[16][16],ll m2[16][16]) {
        int i,j,k;
        ll z;
        for (i=0;i<d;++i) {
                for (j=0;j<d;++j) {
                        m3[i][j] = 0;
                        for (k=0;k<d;++k) {
                                z = (m1[i][k]*m2[k][j])%m;
                                m3[i][j] = (m3[i][j]+z)%m;
                        }
                }
        }
        for (i=0;i<d;++i)
                for (j=0;j<d;++j)
                        m1[i][j] = m3[i][j];
}

int main() {

        while (1) {
                scanf("%d %d %d",&d,&n,&m);
                if (!d && !n && !m)
                        break;

                int i;
                int x;
                for (i=0;i<d;++i) {
                        scanf("%d",&x); 
                        x %= m;
                        a[d-i-1] = x;
                }
                for (i=0;i<d;++i) {
                        scanf("%d",&x);
                        x %= m;
                        f[i] = x;
                }

                if (n<=d) {
                        printf("%d\n",int(f[n-1]));
                        continue;
                }

                n -= d;
                memset(m1,0,sizeof(m1));
                for (i=0;i<d;++i)
                        m1[i][i] = 1;

                int j;
                for (i = 1; i < d; ++i) {
                        for (j = 0; j < d; ++j) {
                                m2[j][i-1] = (j==i);
                        }
                }
                for (i=0;i<d;++i)
                        m2[i][d-1] = a[i];

                while (n) {
                        if (n%2) {
                                umnmat(m1,m2);
                        }
                        umnmat(m2,m2);
                        n /= 2;
                }

                ll ans = 0;
                ll xx;
                for (i=0;i<d;++i) {
                        xx = (f[i]*m1[i][d-1])%m;
                        ans = (ans+xx)%m;
                }

                printf("%d\n",int(ans));
        }

        return 0;
}

  Вверх
chipset
Дата 15.1.2006, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



ЭЭэх... Кто бы мне ещё сказал что это такое...


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
En_t_end
Дата 15.1.2006, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Гость_Женя
Что за первые две фишки не слышал, а вот последнии считаются так. Емкостная сложность оценивается подсчетом, сколько было выделенно и использованно памяти для программы(в том числе heap-memory and stack-memory)-подсчитывается просто - перегружаются new and delete для heap, результаты обработки суммируются с константными размерами stack-переменных.
Временная сложность определяется с помощью установки таймера.
PM MAIL ICQ Skype GTalk Jabber   Вверх
nworm
Дата 15.1.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 1
Всего: 8



Цитата

Емкостная сложность оценивается подсчетом, сколько было выделенно и использованно памяти для программы(в том числе heap-memory and stack-memory)-подсчитывается просто - перегружаются new and delete для heap, результаты обработки суммируются с константными размерами stack-переменных.
Временная сложность определяется с помощью установки таймера.


Это точно пройдёт, если программу предполагается компилировать, используя только один конкретный компилятор, и выполнять, используя одну конкретную машину.

Возможно, придётся все считать вручную.

Это сообщение отредактировал(а) nworm - 15.1.2006, 20:12
PM MAIL WWW   Вверх
Partizan
Дата 16.1.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



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

под апостериорной соответственно после её выполнения...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
nworm
Дата 16.1.2006, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 1
Всего: 8



Цитата

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

под апостериорной соответственно после её выполнения...


Да, похоже. Поисковик даёт примерно такое толкование

1. априорная временная сложность = асимптотическая оценка временной сложности
2. апосториорная = оценка сложности алгоритма с точностью до мультипликативных констант, сделанных для конкретной машины.

Аналогично, ёмкостная сложность.
PM MAIL WWW   Вверх
Гость_Женя
Дата 16.1.2006, 15:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











свременной оценкой сложности я разобрался...вы правы... апостериорная- это надо просто таймерм засекать в начале и конце выполнения алгоритма...априорная, мне показали, там сложные какие товычисления...метод гаусса какой то для первых производных...сам не знаю, откудаони берутся..
а вот какая ёмкостная сложность? допустим априорную я найду..как я понял, надо просто посчитать кол-во памяти, выделяемое под все используемые главные переменные..а вот апостериорную как? ujdjhzn? надо ещё учитывать динамическое выделение, и ещё много всего..так и не понял..никто не знает?
  Вверх
nworm
Дата 16.1.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 1
Всего: 8



Цитата

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


Откуда метод Гаусса? Программа как-то с ним связана?
Там, по-моему, надо просто операции считать (сложения, вычитания и т.п.) причём некоторыми операциями принебрегают. Для многих алгоритмов оценки известны (там ещё символы O-большое применяются).
PM MAIL WWW   Вверх
Гость_Женя
Дата 16.1.2006, 23:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











2 nworm: ну например если сложность линейная, то сложность соответственно: С1*N+C2. вот эти с1 и с2 высчитываются методом гаусса..не спрашивай меня как, не знаю...если интересно, есть вариант другой проги с посчитанной этой фигнёй..
но мне это обещали сделать...а вот с ёмкостной сложностью...особенно с апостериорной...никто не знает...
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1939 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.