a
n=6;
cout<<n<<endl;
Постоянное время, O (1).Это означает, что при увеличении n от 1 до бесконечности количество времени, необходимое для выполнения этого оператора, не увеличивается.Каждый раз, когда вы увеличиваете n, количество необходимого времени не увеличивается.
b
n=16;
for (i=0; i<n; i++)
cout<<i<<endl;
Линейное время, O (n).Это означает, что при увеличении n от 1 до бесконечности количество времени, необходимого для выполнения этого оператора, увеличивается линейно.Каждый раз, когда вы увеличиваете n, количество дополнительного времени, необходимого от предыдущего, остается постоянным.
c
i=6;
n=23;
while (i<n) {
cout<<i-6<<endl;
i++;
}
Линейное время, O (n), такое же, какПример 2 выше.
d
int a[ ] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
n=10;
for (i=0; i<n; i++)
a[i]=a[i]*2;
for (i=9; i>=0; i--)
cout<<a[i]<<endl;
Линейное время, O (n).При увеличении n от 1 до бесконечности количество времени, необходимое для выполнения этих операторов, увеличивается линейно.Линейная линия в два раза круче, чем в примере 3, однако Big O Notation не заботится о том, насколько крута линия, она касается только того, как растут требования ко времени.Два цикла требуют линейно растущего количества времени при увеличении n.
e
sum=0;
n=6;
k=pow(2,n);
for (i=0;i<k;i++)
sum=sum+k;
Создайте график того, сколько раз sum=sum+k
выполняется, учитывая значениеn:
n number_of_times_in_loop
1 2^1 = 2
2 2^2 = 4
3 2^3 = 8
4 2^4 = 16
5 2^5 = 32
6 2^6 = 64
По мере того, как n переходит от 1 к бесконечности, обратите внимание, как количество раз, когда мы находимся в цикле, экспоненциально увеличивается.2->4->8->16->32->64
.Что произойдет, если я подключу n
из 150?Число раз, которое мы будем в цикле, становится астрономическим.
Это экспоненциальное время: O(2^n)
( см. Здесь ) обозначает алгоритм, рост которого удваивается с каждым дополнительным элементом внабор входных данных.Подключите n большого размера на свой страх и риск, и вы будете ждать часов или лет, пока расчет не будет завершен для нескольких элементов ввода.
Почему мы заботимся?
Как компьютерные ученые, мы заинтересованы в правильном понимании обозначения BigO, потому что мы хотим быть в состоянии сказать что-то подобное с уверенностью и убедительностью:
"Алгоритм Джима для вычисления расстояния между планетами занимает экспоненциальное время.Если мы хотим сделать 20 объектов, это занимает слишком много времени, его код - дерьмо, потому что я могу сделать его за линейное время. "
И еще лучше, если им не нравится то, что они слышат, вы можете доказатьэто с математикой.