Задача №1:Время — основной параметр, характеризующий быстродействие алгоритма.
Время, затраченное на реализацию алгоритма, как функция размерности задачи называется временной сложностью алгоритма и обозначается как O[fA(n)].
Примеры:
* «пропылесосить ковер» требует время, линейно зависящее от его площади (Θ(A)), то есть на ковер, площадь которого больше в два раза, уйдет в два раза больше времени. Соответственно, при увеличении площади ковра в сто тысяч раз, объем работы увеличивается строго пропорционально в сто тысяч раз, и т. п.
* «найти имя в телефонной книге» требует всего лишь время, логарифмически зависящее от количества записей (O(log2(n))), так как открыв книгу примерно в середине, мы уменьшаем размер «оставшейся проблемы» вдвое (за счет сортировки имен по алфавиту). Таким образом, в книге, толщиной в 1000 страниц, любое имя находится не больше чем за log_2 1000 10 раз (открываний книги). При увеличении объема страниц до ста тысяч, проблема все еще решается за log_2 100000 17 заходов. (См. Двоичный поиск.)
Теорема про найкращий час сортування. Доведення:
Якщо алгоритм сортування в своїй роботі спирається тільки на операції порівняння двох об'єктів (≤) і не враховує жодної додаткової інформації про елементи, то він не може впорядкувати масив елементів швидше ніж за O(n*log(n)) в найгіршому випадку.
На кожному кроці алгоритм проводить одне порівняння, результатом якого є один з двох варіантів:
1. A<=B
2. A>B
В залежності від результату порівняння алгоритм буде робити подальші дії. Отже, всю роботу алгоритму можна представити у вигляді бінарного дерева в листах якого лежать можливі перестановки вхідного масиву.
Отже, дерево має n! листів, а висота дерева є log(n!). Час роботи в найгіршому випадку пропорційний висоті дерева: O(log(n!)) = O(log(sqrt{2/pi*n}*((n/e)^n)))) = O(n*log(n))
Відомі алгоритми сортування:
n — это количество записей, которые необходимо упорядочить
За час O(n^2)
* сортування вибором
* сортування вставкою
* сортування обміном
За час O(n*log(n))
* пірамідальне сортування
* швидке сортування
* сортування злиттям
За час O(n) з використанням додаткової інформації про елементи
* сортування підрахунком
* сортування за розрядами
* сортування комірками
За час O(n*log^2(n))
* сортування злиттям модифіковане
* сортування Шелла
Якщо цього тобі не хватить викладу ще...
Якщо я правильно зрозумів задачу і враховуючи, що 1 курс і програмування. То лише треба запрограмувати визначення розміру масиву, обчислення швидкодії для їх подальшого порівняння з іншими методами чи з іншими масивами.
Отже реалізація на С++:Задача:
Порівняти швидкодію методів сортування вибором та сортування злиттям
для масиві розміром n i n^n.Програмний код:
int main(int argc, char* argv[])
{
int a[],b[] i,an=10,bn,SV,SZ,SV1,SZ1;
// an-розмір масиву a,bn-розмір масиву b,SV,SV1-швидкодія(сложность алгоритма) сортування вставками масиву a i b відповідно
// SZ,SZ1-швидкодія(сложность алгоритма) сортування злиттям масиву a i b відповідно
br=pow(an,2); //-визначенн розміру масиву b на основі a згідно поставленої задачі
// може бути не відомий розмір а і тоді треба буде визначати при введені масиву
Vsort(a,an); //- викликаєм функцію сортування вставками і сорутєм масив а
Zluttya(a,an); //- викликаєм функцію сортування злиттям і сорутєм масив b
Vsort(b,bn); //- викликаєм функцію сортування вставками і сорутєм масив а
Zluttya(b,bn); //- викликаєм функцію сортування злиттям і сорутєм масив b
SV=pow(an,2); //- згідно формули визначаєм швидкодію сортування вставками на прикладі масиву а
SV1=pow(bn,2); //- згідно формули визначаєм швидкодію сортування вставками на прикладі масиву b
SZ=an*log(an); //- згідно формули визначаєм швидкодію сортування злиттям на прикладі масиву а
SZ1=bn*log(bn); //- згідно формули визначаєм швидкодію сортування злиттям на прикладі масиву b
Por=SV/SZ; //- порівнюєм отримані дані, звідсе визначемо перевагу одного алгоритма над іншим
Por1=SV1/SZ1; //- порівнюєм отримані дані, звідсе визначемо перевагу одного алгоритма над іншим
Por2=SV/SV1; //- звідси визначемо як розмір масиву впливає на швидкодію сортування вставками
Por3=SZ/SZ1; //- звідси визначемо як розмір масиву впливає на швидкодію сортування злиттям
return 0;
}
funcion Vsort(int *a[],int *n)
{
// описуєм функцію сортування вставками
}
funcion Zluttya(int *a[],int *n)
{
// описуєм функцію сортування злиттям
}
Задача №2:Реалізація на С++:Задача:Программа вчитывает текст и выписывает каждое слово в отдельной строчке.
Феншуй - это когда холодильник стоит рядом с компом.
Програмний код:#include "stdafx.h"
#include <iostream.h>
#include <string.h>
#include <conio.h>
int main(int argc, char* argv[])
{
char a[250]="Fen-Shuj exsist when refrigerator is near computer."; int g=0,h=0,i,k,m=0,j;
k=strlen(a);
for(i=0;i<k;i++)
cout<<a[i];
cout<<"\n"<<"\n";
for(i=0;i<k;i++)
if(a[i]==' '||a[i]=='.')
{ m++;
if(m==1)
for(j=g;j<i;j++){cout<<a[j];h=i+1;}
cout<<"\n";
if(m>1)
{
for(j=g+h;j<i;j++){cout<<a[j];h=i+1;}
cout<<"\n";
}
}
cout<<"\n";
return 0;
}