Časová zložitosť programu (matematické vyjadrenie)

Programovacie jazyky, rady, poradňa...
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Časová zložitosť programu (matematické vyjadrenie)

Príspevok od používateľa Fata! ChaoS »

Ahojte, mám nasledovný program a neviem napísať jeho časovú zložitosť v matematickom vyjadrení.

V podstate časová zložitosť tohto programu závisí od počtu schodov(N) a takťiež aj od toho, že kedy sa vykoná podmienka schod+k == schod[j]
Len to neviem dať do matematického vyjadrenia. Časová zložitosť je lineárna od .... O(xy)

Kód: Vybrať všetko

#include <iostream>
using namespace std;

int main()
{
    int N,k;
    bool panelak = false;
    cin >> N;
    cin >> k;
    
    
    int schod[N];
    for(int i=0;i<N;i++) cin >> schod[i];
    
    for(int i=0;i<N&&panelak==false;i++){
        for(int j=i+1;j<N;j++){
            if(schod[i]+k == schod[j]){
               cout << schod[i];
               panelak = true;
            }
        }
     }
   if(panelak == false) cout << "Panelak sa neda postavit"; 
    
   cout << endl; 
   system("pause");
   return 0;   
}
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

for zapíšeš ako suma, takže to budú tri sumy. Prvá bude od 0 po N, druhý cyklus si ekvivalentne prepíšeš na suma 0 až N a panelak==false môžeš zapísať ako if(panelak==false) break; vovnútri cyklu (je to ekvivalentné, ale umožni ti to lahšie pochopiť tej sume. Posledná suma je jednoduchá. Nakoľko je tretí cyklus v druhom, bude to suma zo sumy. Tá prvá suma bude iba pripočítaná.
Čo sa týka tej podmienky ktorá určuje či sa vykoná priradenie, cháp ju že bude vždy splnená aby nastalo to priradenie. Vďaka tomu vypočítaš maximálnu časovú zložitosť. Ak by si mal zisťovať optimálnu časovú zložitosť tak by to bolo trošku inač, ale nepíšeš ktorú ti treba a väčšinou sa vyjadruje práve maximálna. Hádam chápeš, aj by som ti to napísal ale nechce sa mi babrať s tou sumou vo worde a na papier nemôžem lebo tu nemám skener :)
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

Pozri sa na to takto: prvy cyklus vykona N krokov, druhy spravi (N - i) krokov, teda dokopy N + (N - 1) + (N - 2) + ... + 1, co je suma cisel od 1 po N, teda N*(N-1)/2. Program teda vykona v najhorsom pripade radovo N^2 krokov, takze casova zlozitost je kvadraticka - O(n^2).
PS: existuje aj ovela efektivnejsi algoritmus na riesenie tejto ulohy... keby ti ho prezradim, bolo by to nefer voci ostatnym riesitelom KSP. ;)
Napísať odpoveď