Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.

Сортировка подсчётом — алгоритм сортировки, в котором используется диапазон чисел сортируемого массива (списка) для подсчёта совпадающих элементов.

Применение сортировки подсчётом целесообразно лишь тогда, когда сортируемые числа имеют (или их можно отобразить в) диапазон возможных значений, который достаточно мал по сравнению с сортируемым множеством, например, миллион натуральных чисел меньших 1000. Эффективность алгоритма падает, если при попадании нескольких различных элементов в одну ячейку, их надо дополнительно сортировать. Необходимость сортировки внутри ячеек лишает алгоритм смысла, так как каждый элемент придётся просматривать более одного раза..

Оценим эффективность сортировки подсчетом по количеству сравнений. Так как мы сравниваем каждый элемент с каждым элементом массива, то имеем N*N сравнений. Эффективность алгоритма C=N*N=Θ(N2), т.е. сортировка подсчетом имеет квадратичную сложность. Множитель N2 свидетельствует о том, что алгоритм неэффективен при большом N , т.к. при удвоении числа элементов массива количество сравнений увеличится в 4 раза. Но он очень прост в реализации.

Независимо от отсортированности массива, количество перестановок равно длине массива N. То есть эффективность алгоритма по перестановкам имеет линейную сложность.

Число перестановок: min=0, max= N2 , med= N2/2

Число сравнений: N2

Пример

К 503 087 512 061 908 170 897 275 653 426 154 509 612 677 765 703

С 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

С1 6 0 1 0 1 0 1 0 1 0 0 1 1 1 1 1

К1 сравнивается с остальными, если больше Сn, то 1, если меньше – 0, потом количество нулей вписывается в С1.

Считаем, сколько элементов меньше первого элемента массива (503), затем – сколько элементов меньше второго числа(087), и т.д. Число 503 по значению превышает только шесть чисел.и.т.д

С2 6 1 2 0 2 1 2 1 1 1 1 2 2 2 2 2

С3 6 1 6 0 3 1 3 1 2 1 1 2 3 3 3 3

С4 6 1 8 0 4 2 4 …

С15 6 1 8 0 15 3 14 4 10 5 2 7 9 11 13 12

Фрагментпрограммы:

For (i=0; i<n-1; i++)

For (i=i+1; j<n; j++)

{ if (k[i]>k[j]) c[i]++;

Elsec[j]++;

}

Внутренняя сортировка данных методом выбора. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.

Этот метод – один из простейших, и он работает очень хорошо для небольших

файлов. Кроме того, хотя сортировка выбором является методом «грубой силы», он имееточень важное применение: поскольку каждый элемент передвигается не более чемраз, то он очень хорош для больших записей с маленькими ключами.

Идея сортировки выбором заключается в поиске максимального элемента и вставки его в конец массива. Затем длина массива уменьшается на один элемент («водворенный на свое место» исключается) и процедура повторяется снова. Алгоритм сортировки выполняется до тех пор, пока длина сортируемого массива не станет равна двум элементам.

В целом, это плохой метод, и он должен быть использован только в случаях, когда явно необходимо минимизироать количество присваиваний.

Число сравнений: N2

Число перестановок: N

Пример

Начальное состояние массива 8 23 5 65 44 33 1 6
Шаг 1 1 23 5 65 44 33 8 6
Шаг 2 1 5 23 65 44 33 8 6
Шаг 3 1 5 6 65 44 33 8 23
Шаг 4 1 5 6 8 44 33 65 23
Шаг 5 1 5 6 8 33 44 65 23
Шаг 6 1 5 6 8 23 44 65 33
Шаг 7 1 5 6 8 23 33 65 44
Шаг 8 1 5 6 8 23 33 44 65

Фрагмент программы:

For (i=n; i>1; i--)

{nmax=n

For(j=i-1; i>0; j--)

{if(k[j]>k[nmax])

Nmax=j;

}

{ktemp=k[i];

K[i]=k[nmax]

K[nmax]=ktemp;

}

}

Метод хорд

Метод основан на замене функции f(x) на каждом шаге поиска хордой, пересечение которой с осью Х дает приближение корня.

При этом в процессе поиска семейство хорд может строиться:

а) при фиксированном левом конце хорд, т.е. z=a, тогда начальная точка х0=b (рис. 4.10а);

б) при фиксированном правом конце хорд, т.е. z=b, тогда начальная точка х0=a (рис. 4.10б);

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru


Рис. 4.10.

В результате итерационный процесс схождения к корню реализуется рекуррентной формулой:

для случая а)

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru (4.11)

для случая б)

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru (4.12)

Процесс поиска продолжается до тех пор, пока не выполнится условие

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru (4.13)

Метод обеспечивает быструю сходимость, если f(z)f"(z) > 0, т.е. хорды фиксируются в том конце интервала [a,b], где знаки функции f(z) и ее кривизны f"(z) совпадают.

Схема алгоритма уточнения корня методом хорд

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Пример программы:

double f(double x)

{

returnsqrt(fabs(cos(x)))- x;// Заменить ф-ей, корни которой мы ищем

}

// a, b - пределы хорды, epsilon - необходимая погрешность

doublefindRoot(double a,double b,double epsilon)

{

while(fabs(b - a)> epsilon)

{

a = b -(b - a)*f(b)/(f(b)- f(a));

b = a -(a - b)*f(a)/(f(a)- f(b));

}

// a - i-1, b - i-тыйчлены

return b;

}

Алгоритм

1. Задается начальное приближение x0.

2. Пока не выполнено условие остановки, в качестве которого можно взять Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru или Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru (то есть погрешность в нужных пределах), вычисляют новое приближение: Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru [1].

Достоинства метода Ньютона: Метод Ньютона - самый быстрый способ нахождения корней уравнений: обычно заданная точность достигается за 2-3 итерации. Очень быстрая сходимость по сравнению с методом половинного деления и методом простой итерации к заданной точности.

Недостаток: громоздкий алгоритм: на каждой итерации необходимо вычислять значение функции и ее первой производной.

МЕТОД НЬЮТОНА-РАФСОНА

Повышение эффективности метода за счёт использования информации о производной накладывает дополнительные ограничения на функцию. Кроме унимодальности функция должна быть непрерывной и дважды дифференцируемой.

2.5.1. Метод Ньютона-Рафсона.

Пусть Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru - непрерывная и дважды дифференцируемая функция.

Требуется найти корень уравнения Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru .

Зададим Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru – начальную точку поиска. Построим линейную аппроксимацию функции Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru в точке Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru . Для этого разложим Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru в ряд Тейлора в точке Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru и отбросим все члены второго порядка и выше.

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Сходимость метода зависит от выбора начальной точки и вида функции.

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

не сходится

Условие выхода Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Условие сходимости

Достаточное условие сходимости, таково:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Это неравенство может быть переписано в виде

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

откуда получаем, что сходимость гарантируется, когда, во-первых,

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

так как Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru (тем самым проясняется смысл выбора знака числа Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru ), а во-вторых, когда Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru при всех Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru на всём рассматриваемом отрезке, окружающем корень. Это второе неравенство заведомо выполнено, если

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

где Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru . Таким образом, угловой коэффициент Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru не должен быть слишком мал по абсолютной величине: при малом угловом коэффициенте уже на первом шаге точка Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru может выскочить из рассматриваемой окрестности корня Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , и сходимости итераций к корню может не быть.

Метод простых итераций

В ряде случаев весьма удобным приемом уточнения корня уравнения является метод последовательных приближений (метод итераций).

Пусть с точностью Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru необходимо найти корень уравнения f(x)=0, принадлежащий интервалу изоляции [a,b]. Функция f(x) и ее первая производная непрерывны на этом отрезке.

Для применения этого метода исходное уравнение f(x)=0 должно быть приведено к виду

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru (4.2)

В качестве начального приближения 0 выбираем любую точку интервала [a,b].

Далее итерационный процесс поиска корня строится по схеме:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru (4.3)

В результате итерационный процесс поиска реализуется рекуррентной формулой (4.3). Процесс поиска прекращается, как только выполняется условие

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru (4.4)

или число итераций превысит заданное число N.

Для того, чтобы последовательность х1, х2,…, хn приближалась к искомому корню, необходимо, чтобы выполнялось условие сходимости:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru (4.5)

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
Рис. 4.6. Геометрический смысл метода

Переходим к построению схемы алгоритма (рис. 4.7). Вычисление функции Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru оформим в виде подпрограммы.

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
Рис. 4.7. Схема алгоритма уточнения корня методом итераций

Метод прямоугольников

Словесный алгоритм метода прямоугольников:

  1. Весь участок [a,b] делим на n равных частей с шагом h=(b-a)/n.
  2. Определяем значение yi подынтегральной функции f(x) в каждой части деления, т.е.

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

  1. В каждой части деления подынтегральную функцию f(x) аппроксимируем интерполяционным многочленом степени n = 0, т.е. прямой, параллельной оси OX. В результате вся подынтегральная функция на участке [a,b] аппроксимируется ломаной линией.
  2. Для каждой части деления определяем площадь Si частичного прямоугольника.
  3. Суммируем эти площади. Приближенное значение интеграла I равно сумме площадей частичных прямоугольников.

Если высота каждого частичного прямоугольника равна значению подынтегральной функции в левых концах каждого шага, то метод называется методом левых прямоугольников (рис.12.3). Тогда квадратурная формула имеет вид

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru


Рис. 12.3. Метод левых прямоугольников

Если высота каждого частичного прямоугольника равна значению подынтегральной функции в правых концах каждого шага, то метод называется методом правых прямоугольников (рис.12.4). Тогда квадратурная формула имеет вид

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru


Рис. 12.4. Метод правых прямоугольников

Точность каждого метода прямоугольников имеет порядок h.

Алгоритм вычисления интеграла построим в виде итерационного процесса поиска с автоматическим выбором шага. На каждом шаге будем уменьшать шаг в два раза, то есть увеличивать число шагов n в два раза. Выход из процесса поиска организуем по точности вычисления интеграла. Начальное число шагов n=2.Схема алгоритма методов прямоугольников представлена на рис.12.5.

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru


Рис. 12.5. Схема алгоритма метода прямоугольников (с автоматическим выбором шага)

Условные обозначения:

a,b - концы интервала,

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru - заданная точность,

с=0 - метод левых прямоугольников,

с=1 - метод правых прямоугольников,

S1 - значение интеграла на предыдущем шаге,

S - значение интеграла на текущем шаге.

Пример реализации

Формула средних прямоугольников для аналитически заданной функции, написанная на С

#include <stdio.h>#include <math.h> double f(double x){//Подынтегральная функцияreturnsin(x);//Например, sin(x)} doublerectangle_integrate(double a,double b,int n,double(*f)(double)){double result, h;int i; h =(b-a)/n;//Шагсеткиresult=0.0; for(i=1; i <= n; i++){result+= f(a + h *(i -0.5));//Вычисляем в средней точке и добавляем в сумму}result*= h; return result;} int main(void){double integral;integral=rectangle_integrate(0,2,100,f);printf("The value of the integral is: %lf \n", integral);return0;}

Метод трапеций

Словесный алгоритм метода трапеций:

  1. Интервал [a,b] делим на n равных частей с шагом h=(b-a)/n.
  2. Вычисляем значение подынтегральной функции в каждой узловой точке

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

  1. На каждом шаге подынтегральную функцию f(x) аппроксимируем прямой, соединяющей две соседние узловые точки. В результате вся подынтегральная функция на участке [a,b] заменяется ломаной линией проходящей через все узловые точки.
  2. Вычисляем площадь каждой частичной трапеции.
  3. Приближенное значение интеграла равно сумме площадей частичных трапеций, т.е.

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Найдем площади Si частичных трапеций:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Приближенное значение интеграла равно

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Точность метода трапеций имеет порядок h2.

Схема алгоритма метода трапеций представлена на рис.12.6.

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Метод трапеций для оценки определенного интеграла. Величина определенного интеграла численно равна площади фигуры, образованной графиком функции и осью абсцисс (геометрический смысл определенного интеграла). Следовательно, найти Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru – это значит оценить площадь фигуры, ограниченной перпендикулярами, восстановленными к графику подынтегральной функции f(x) из точек a и b, расположенных на оси аргумента x.

Для решения задачи разобьем интервал [a,b] на n одинаковых участков. Длина каждого участка будет равна h=(b-a)/n (см. рис.).

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Восстановим перпендикуляры из каждой точки до пересечения с графиком функции f(x). Если заменить полученные криволинейные фрагменты графика функции отрезками прямых, то тогда приближенно площадь фигуры, а следовательно и величина определенного интеграла оценивается как площадь всех полученных трапеций. Обозначим последовательно значения подынтегральных функций на концах отрезков f0, f1, f2,..., fn и подсчитаем площадь трапеций

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

В общем случае формула трапеций принимает вид

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

где fi – значение подынтегральной функции в точках разбиения интервала (a,b) на равные участки с шагом h; f0, fn – значения подынтегральной функции соответственно в точках a и b.

Остаточный член пропорционален длине интервала [a,b] и квадрату шага h

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Согласно рис. и формуле остаточного члена, точность вычисления определенного интеграла повышается с уменьшением шага h (увеличением числа отрезков n).

Метод трапеций можно реализовать в виде процедуры или даже функции, поскольку результат вычисления определенного интеграла – скалярная величина. Параметрами программного модуля являются границы интервала (a и b) и число шагов разбиения на малые интервалы n. Для составления универсальной функции целесообразно предусмотреть вычисление подынтегральной функции f(x) во внешней процедуре – функции.

Метод трапеций — метод численного интегрирования функции одной переменной, заключающийся в замене на каждом элементарном отрезке подынтегральной функции на многочлен первой степени, то есть линейную функцию. Площадь под графиком функции аппроксимируется прямоугольными трапециями. Алгебраический порядок точности равен 1.

Если отрезок Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru является элементарным и не подвергается дальнейшему разбиению, значение интеграла можно найти по формуле

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Это простое применение формулы для площади трапеции — полусумма оснований, которыми в данном случае являются значения функции в крайних точках отрезка, на высоту (длину отрезка интегрирования). Погрешность аппроксимации можно оценить через максимум второй производной

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Составная формула

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Применение составной формулы трапеций

Если отрезок Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru разбивается узлами интегрирования и каждом из элементарных отрезков применяется формула трапеций, суммирование даст составную формулу трапеций

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Формула Котеса

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Применение формулы трапеций для равномерной сетки

В случае равномерной сетки

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

где Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru — шаг сетки.

Замечательные свойства

Метод трапеций быстро сходится к точному значению интеграла для периодических функций, поскольку погрешность за период аннулируется. Метод может быть получен путём вычисления среднего арифметического между результатами применения формул правых и левых прямоугольников.

Метод Симпсона

В методе Симпсона в каждой части деления подынтегральная функция аппроксимируется квадратичной параболой a0x2+a1x+a2. В результате вся кривая подынтегральной функции на участке [a,b] заменяется кусочно-непрерывной линией, состоящей из отрезков квадратичных парабол. Приближенное значение интеграла I равно сумме площадей под квадратичными параболами.

Т.к. для построения квадратичной параболы необходимо иметь три точки, то каждая часть деления в методе Симпсона включает два шага, т.е.

Lk=2h.

В результате количество частей деления N2=n/2. Тогда n в методе Симпсона всегда четное число.

Определим площадь S1 на участке [x0, x2] (рис.12.2).

Исходя из геометрического смысла определенного интеграла, площадь S1 равна определенному интегралу от квадратичной параболы на участке [x0, x2]:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Неизвестные коэффициенты квадратичной параболы а0 , а1, а2 определяем из условия прохождения параболой через три узловых точки с координатами (x0y0), (x1y1), (x2y2).

На основании этого условия строим систему линейных уравнений:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Решая эту систему, найдем коэффициенты параболы.

В результате имеем: Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru ..

Для участка [x2, x4]: Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru ..

:::::::::::::::::::

Для участка [xi-1, xi+1]: Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru .,

где Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru .

Суммируя все площади S1 под квадратичными параболами, получим квадратурную формулу по методу Симпсона:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

где

N2 - количество частей деления.

Точность метода Симпсона имеет порядок (h3/h4).

Схема алгоритма метода Симпсона представлена на рис.12.7.

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru


Рис. 12.7. Схема алгоритма Симпсона (с автоматическим выбором шага)

Формула Симпсона (также Ньютона-Симпсона[1]) относится к приёмам численного интегрирования. Получила название в честь британского математика Томаса Симпсона (1710—1761).

Суть приёма заключается в приближении подынтегральной функции на отрезке Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru интерполяционным многочленом второй степени Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , то есть приближение графика функции на отрезке параболой. Метод Симпсона имеет порядок погрешности 4 и алгебраический порядок точности4.

Формула

Формулой Симпсона называется интеграл от интерполяционного многочлена второй степени на отрезке Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru :

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

где Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru и Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru — значения функции в соответствующих точках (на концах отрезка и в его середине)

Погрешность

При условии, что у функции Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru на отрезке Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru существует четвёртая производная, погрешность Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , согласно найденной Джузеппе Пеано формуле равна:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

В связи с тем, что значение Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru зачастую неизвестно, для оценки погрешности используется следующее неравенство:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Оптимизация

Применение в физике

Компьютерное моделирование играет в современной физике важную роль и метод Монте-Карло является одним из самых распространённых во многих областях от квантовой физики до физики твёрдого тела, физики плазмы и астрофизики.

Определение

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Этот пример показывает интерполяционный многочлен Лагранжа для четырёх точек (-9,5), (-4,2), (-1,-2) и(7,9), а также полиномы yi li(x), каждый из которых проходит через одну из выделенных точек, и принимает нулевое значение в остальных xj

Лагранж предложил способ вычисления таких многочленов:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

где базисные полиномы определяются по формуле:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru обладают следующими свойствами:

§ являются многочленами степени Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

§ Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

§ Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru при Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Отсюда следует, что Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , как линейная комбинация Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , может иметь степень не больше Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , и Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , Q.E.D.

Применения

Полиномы Лагранжа используются для интерполяции, а также для численного интегрирования.

Пусть для функции Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru известны значения Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru в некоторых точках. Тогда мы можем интерполировать эту функцию как

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

В частности,

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Значения интегралов от Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru не зависят от Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , и их можно вычислить заранее, зная последовательность Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru .

Постановка задачи

Пусть задана функция Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru .
Пусть заданы точки Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru из некоторой области Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru .
Пусть значения функции Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru известны только в этих точках.
Точки Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru называют узлами интерполяции.
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru - шаг интерполяционной сетки.
Задача интерполяции состоит в поиске такой функции Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru из заданного класса функций, что Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Метод решения задачи

Полином Лагранжа

Представим интерполяционную функцию в виде полинома
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
где Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru - полиномы степели n вида:
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
Очевидно, что Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru принимает значение 1 в точке Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru и 0 в остальных узлах интерполяции. Следовательно в точке Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru исходный полином принимает значение Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
Таким образом, построенный полином Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru является интерполяционным полиномом для функции Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru на сетке Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru .

Полином Ньютона

Интерполяционный полином в форме Лагранжа не удобен для вычислений тем, что при увеличении числа узлов интерполяции приходится перестраивать весь полином заново.
Перепишем полином Лагранжа в другом виде:
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
где Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru - полиномы Лагранжа степени i ≤ n.
Пусть Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
. Этот полином имеет степень i и обращается в нуль при Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru .
Поэтому он представим в виде:
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , где Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru - коэффициент при Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru . Так как Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru не входит в Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , то Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru совпадает с коэффициентом при Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru в полиноме Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru . Таким образом из определения Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru получаем:
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
где
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
Препишем формулу Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru в виде
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
Рекуррентно выражая Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru пролучам окончательную формулу для полинома:
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
Такое представление полинома удобно для вычисления, потому что увеличение числа узлов на единицу требует добавления только одного слагаемого.

Выбор узлов интерполяции

Так как от выбора узлов завист точность интерполяции, то возникает вопрос о том, как их выбирать. С помощью выбора узлов можно минимизировать значение Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru в оценке погрешности. Эта задача решается с помощью многочлена Чебышева [1]:
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
В качестве узлов следут взять корни этого многочлена, то есть точки:
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Пример

В качастве примера рассмотрим интерполяцию синуса. Возьмем равномерную решетку x = [-3,-1.5,0,1.5,3];
Интерполяция полиномом Лагранжа:
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
Ошибка(максимальное отклонение от sin(x) на отрезке):0.1423
Интерполяция полиномом Ньютона:
Ошибка:
Возьмем решетку x с узлами в корнях полинома Чебышева= [-2.8531,-1.7632,0,1.7634,2.8532];
Интерполяция полиномом Лагранжа:
Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru
Ошибка: 0.0944
Интерполяция полиномом Ньютона:
Ошибка:

Введение

Изложение метода

Интерполяция кубическими сплайнами является частным случаем кусочно-полиномиальной интерполцией. В этом специальном случае между любыми двумя соседними узлами функция интерполируется кубическим полиномом.его коэффициенты на каждом интервале определяются из условий сопряжения в узлах:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Кроме того, на границе при Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru и Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru ставятся условия

( 2 )

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Будем искать кубический полином в виде

( 3 )

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Из условия Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru имеем

( 4 )

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Вычислим производные:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

и потребуем их непрерывности при Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru :

( 5 )

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Общее число неизвестных коэффициентов, очевидно, равно Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , число уравнений (4) и (5) равно Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru . Недостающие два уравнения получаем из условия (2) при Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru и Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru :

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Выражение из (5) Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , подставляя это выражение в (4) и исключая Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , получим

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Подставив теперь выражения для Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru и Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru в первую формулу (5), после несложных преобразований получаем для определения Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru разностное уравнение второго порядка

( 6 )

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

С краевыми условиями

( 7 )

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Условие Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru эквивалентно условию Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru и уравнению Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru . Разностное уравнение (6) с условиями (7) можно решить методом прогонки, представив в виде системы линейных алгебраических уравнений вида Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , где вектор Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru соответствует вектору Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru , вектор Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru поэлементно равен правой части уравнения (6), а матрица Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru имеет следующий вид:

где Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru и Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru .

Метод прогонки

Метод прогонки, основан на предположении, что искомые неизвестные связаны рекуррентным соотношением:

( 8 )

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Используя это соотношение, выразим Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru и Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru через Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru и подставим в i-e уравнение:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

,

где Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru - правая часть i-го уравнения. Это соотношение будет выполняться независимо от решения, если потребовать

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм. - student2.ru

Отсюда следует:

Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.

Сортировка подсчётом — алгоритм сортировки, в котором используется диапазон чисел сортируемого массива (списка) для подсчёта совпадающих элементов.

Применение сортировки подсчётом целесообразно лишь тогда, когда сортируемые числа имеют (или их можно отобразить в) диапазон возможных значений, который достаточно мал по сравнению с сортируемым множеством, например, миллион натуральных чисел меньших 1000. Эффективность алгоритма падает, если при попадании нескольких различных элементов в одну ячейку, их надо дополнительно сортировать. Необходимость сортировки внутри ячеек лишает алгоритм смысла, так как каждый элемент придётся просматривать более одного раза..

Оценим эффективность сортировки подсчетом по количеству сравнений. Так как мы сравниваем каждый элемент с каждым элементом массива, то имеем N*N сравнений. Эффективность алгоритма C=N*N=Θ(N2), т.е. сортировка подсчетом имеет квадратичную сложность. Множитель N2 свидетельствует о том, что алгоритм неэффективен при большом N , т.к. при удвоении числа элементов массива количество сравнений увеличится в 4 раза. Но он очень прост в реализации.

Независимо от отсортированности массива, количество перестановок равно длине массива N. То есть эффективность алгоритма по перестановкам имеет линейную сложность.

Число перестановок: min=0, max= N2 , med= N2/2

Число сравнений: N2

Пример

К 503 087 512 061 908 170 897 275 653 426 154 509 612 677 765 703

С 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

С1 6 0 1 0 1 0 1 0 1 0 0 1 1 1 1 1

К1 сравнивается с остальными, если больше Сn, то 1, если меньше – 0, потом количество нулей вписывается в С1.

Считаем, сколько элементов меньше первого элемента массива (503), затем – сколько элементов меньше второго числа(087), и т.д. Число 503 по значению превышает только шесть чисел.и.т.д

С2 6 1 2 0 2 1 2 1 1 1 1 2 2 2 2 2

С3 6 1 6 0 3 1 3 1 2 1 1 2 3 3 3 3

С4 6 1 8 0 4 2 4 …

С15 6 1 8 0 15 3 14 4 10 5 2 7 9 11 13 12

Фрагментпрограммы:

For (i=0; i<n-1; i++)

For (i=i+1; j<n; j++)

{ if (k[i]>k[j]) c[i]++;

Elsec[j]++;

}

Наши рекомендации