Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2009, 19:57   #1
Алежа
 
Регистрация: 16.11.2008
Сообщений: 7
По умолчанию Оценка алгоритма

Реализовав алгоритм быстрой сортировки я нахожу время работы алгоритма при определённом количестве элементов в массиве. Мне надо сравнить полученное значение с наихудшей и средней оценкой. Средняя оценка равна O(n*log n), наихудшая O(n*n).

Как связать полученное время с этими формулами?

P.S. жду помощи. очень надо.

Последний раз редактировалось Алежа; 17.01.2009 в 20:19.
Алежа вне форума Ответить с цитированием
Старый 18.01.2009, 11:25   #2
sim_84
Пользователь
 
Регистрация: 17.01.2009
Сообщений: 18
По умолчанию

Нужно засекать не время, а количество шагов работы алгоритма n.
sim_84 вне форума Ответить с цитированием
Старый 18.01.2009, 12:32   #3
Алежа
 
Регистрация: 16.11.2008
Сообщений: 7
По умолчанию

Не подскажете как это сделать?
Алежа вне форума Ответить с цитированием
Старый 18.01.2009, 13:39   #4
sim_84
Пользователь
 
Регистрация: 17.01.2009
Сообщений: 18
По умолчанию Держи код на С

// A - сортируемый массив, a и b - границы, n - оценка сложности (в начале 0)
Код:
template <class T>
void Qsort(T *A, int a, int b, int n){
    int i, j, m;
    T c;
    if (a>=b) return;                                  
    for (i=a, j=b, m=1; i<j; m>0?j--:i++){
       n++;
        if (A[i]>A[j]){  
            c = A[i]; 
            A[i] = A[j]; 
            A[j] = c;
            m = -m;}}
    Qsort(A, a, i-1, n); 
    Qsort(A, i+1, b, n);
    return;
}

Последний раз редактировалось Stilet; 19.01.2009 в 09:01.
sim_84 вне форума Ответить с цитированием
Старый 18.01.2009, 13:40   #5
sim_84
Пользователь
 
Регистрация: 17.01.2009
Сообщений: 18
По умолчанию

Извини ошибся не int n, а int *n
sim_84 вне форума Ответить с цитированием
Старый 18.01.2009, 18:34   #6
Алежа
 
Регистрация: 16.11.2008
Сообщений: 7
По умолчанию

Спасибо за это. Но как после нахождения количества шагов сравнивать с теоретической формулой? Как находить константу С из С*n*log n?
Алежа вне форума Ответить с цитированием
Старый 20.01.2009, 14:18   #7
sim_84
Пользователь
 
Регистрация: 17.01.2009
Сообщений: 18
По умолчанию

Средняя оценка (b-a)*log(b-a)
Наихудшая (b-a)*(b-a)
Реальная работа алгоритма n

В простейшем случае a=0, b= размер твоего массива - 1
sim_84 вне форума Ответить с цитированием
Старый 20.01.2009, 14:28   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

В книжках написано, что это делается так. Если нужно отсортировать массив по возрастанию, то берут упорядоченный по возрастанию массив и сортируют, это наилучший вариант. Потом это массив инверсируют и снова сортируют, это наихудший вариант. Среднее=(худ - луч)/2. А как считать, по времени или по другим критериям, неважно. Потом сортируют рандомный массив и сравнивают хоть с каким.

P.S. Считать по времени при скорости современных компьютеров нецелесообразно. Массив их 5000 элементов сортируется почти мнгновенно. Лучше по количеству операций сравнения и обмена.

Последний раз редактировалось puporev; 20.01.2009 в 14:32.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнительная оценка локальных СУБД Stilet Свободное общение 2 23.11.2008 15:33
Оценка состояния HDD с помощью системы S.M.A.R.T scruffy Общие вопросы Delphi 0 01.05.2008 19:18
Изменения алгоритма delphi_beginner Общие вопросы Delphi 2 13.05.2007 21:27
визуализация алгоритма Alar Паскаль, Turbo Pascal, PascalABC.NET 0 30.10.2006 14:10