Czy taka złożoność obliczeniowa

0

Pytanie za 100 pkt, czy podany niżej program ma złożoność O(n log n) ? :> Program ma za zadanie sprawdzić czy liczba z tablicy S1 po z sumowaniu z liczba z tablicy S2 da nam wskazana liczbę x

#include<iostream>

using namespace std;


int S1[] = {1,4,7,2};
int S2[] = {2,3,1,15};
    
int n=4; //liczba elementów w tablicy, obie tablice są identyczne

void szukaj_sumy(int poczatek,int koniec,int x)
{
     int pomoc = x-S1[poczatek];
     
     if(poczatek+1<=koniec) szukaj_sumy(poczatek+1,koniec,x);
     
     if(pomoc>0) 
     {
                 for(int i=0;i<=koniec;i++)
                 {
                         if(S2[i]==pomoc)
                         {
                                         cout<<"oki"<<endl;
                                         break;
                         }
                 }
     }
}
    

int main()
{
    
    int x=22; //suma ma dać tą liczbę
    
    szukaj_sumy(0,n-1,x);
    
    
    
    system("pause");
    return 0;
}
0

Rekurencja w takiej sytuacji? No coż ;]
A co do pytania: oczywiście że nie. Niby skąd byś tam wziął ten logarytm? Oczywiście że to jest O(n^2) bo przecież dla każdego elementu z tablicy pierwszej przeglądasz całą tablicę drugą, czyli masz n*n.

Można to zrobić w O(nlogn) jeśli najpierw posortujesz obie tablice (2*O(nlogn)) a następnie dla każdej liczby z tablicy pierwszej (n) będziesz połówkowo szukał brakującej do sumy liczby (szukanie połówkowe to logn).
Dostaniesz w ten sposób O(nlogn).

1 użytkowników online, w tym zalogowanych: 0, gości: 1