Нотация с голямо О на програма (най-лошия случай)

Имам въпрос относно теорията на сложността. Ако имам алгоритъм за сортиране с мехурчета и искам да намеря времето за работа в най-лошия случай Big O, можем да заключим, че това е O(n^2). Сега, какво ще кажете за това, ако имам програма, която изпълнява различни операции като алгоритъм за сортиране, алгоритъм за търсене и т.н. Как да разбера кое е най-лошото време за изпълнение (Голямо О) на тази програма като цяло.

Например, как наличието на различни алгоритми в рамките на една програма със съответния най-лош случай на време на изпълнение Big O стига до заключението за най-лошия случай на време на изпълнение (Big O) на цялата програма. Например когато една програма има следното: O(n^2), O(1), O(n).... Коя от тези нотации е тази, която представлява цялата програма?

Как бихте намерили най-лошото време за работа Big O на тази програма?

import java.util.*;
public class Prog1 {
   public static void main(String[] args) {

    int first = 0;
    int last;
    int middle;
    int search;
    int[] array;

    Scanner input = new Scanner(System.in);
    System.out.println("Number of elements");
    int n = input.nextInt();

    array = new int[n];

    System.out.println("Enter " + n + " value ");
    for (int x = 0; x < n; x++) {
        array[x] = input.nextInt();
    }

    System.out.println("Value to search");
    search = input.nextInt();

    last = n - 1;
    middle = (first + last) / 2;

    while (first <= last) {
        if (array[middle] < search)
            first = middle + 1;
        else if (array[middle] == search) {
            System.out.println(" Number " + search + " is in the array");
            break;
        } else
            last = middle - 1;

        middle = (first + last) / 2;
    }
    if (first > last)
        System.out.println(" Number " + search + " is not in the list.");
 }
}

person Plrr    schedule 28.09.2014    source източник
comment
Е, какъв е асимптотичният растеж на цялата програма по отношение на n?   -  person Oliver Charlesworth    schedule 29.09.2014


Отговори (1)


Най-високата. O(n^2) + O(n) + O(1) = O(n^2) асимптотично! Ето как бихте изчислили сложността на алгоритъм. Няма смисъл да говорим за "сложност" на програмата.

person Alboz    schedule 28.09.2014
comment
Защо избрахте O(n^2) пред другите две? - person Plrr; 29.09.2014
comment
@Plrr Това не е избор. - person Alboz; 29.09.2014
comment
@Pirr виж това upload.wikimedia.org/math/f/3 /b/ - person Alboz; 29.09.2014
comment
Знам... Просто искам да знам защо. Знам, че сте посочили най-високото в публикацията си. Но работата е там, че не разбирам как най-високото представлява най-лошото време за работа Big O на тази програма. - person Plrr; 29.09.2014
comment
@Plrr Това е определението за Big-O нотация и сложност. Когато N е достатъчно голям, единственият член, който има значение, е този с най-висок показател. Това определя общата сложност. Трябва да помислите за по-добро изучаване на теорията. - person Alboz; 29.09.2014