- •1Графика
- •1.1Алгоритм Сазерленда-Кохена, отсечение отрезка прямоугольным окном
- •1.2Алгоритм Лианга-Барски, отсечение отрезка прямоугольным окном
- •2Представление разреженных матриц.
- •2.1Форматы представления разреженных матриц
- •2.2Конвертация разреженной матрицы из нормальной формы в формат rr(c)o
- •2.3Конвертация разреженной матрицы, представленной в формате rr(c)u в нормальную форму
- •2.4Транспонирование разреженной матрицы, заданной в формате rr(c)u
- •2.5Сложение двух матриц, заданных в формате rr(c)u.(1-й способ)
- •2.6Сложение двух матриц, заданных в формате rr(c)u.(2-й способ)
- •2.7Умножение двух матриц, заданных в формате rr(c)u.(1-й способ)
- •2.8Умножение двух матриц, заданных в формате rr(c)u.(2-й способ)
- •3Интегральные уравнения.
- •3.1Введение
- •3.2Уравнение Вольтерра первого рода
- •3.3Линейное уравнение Вольтерра второго рода
- •3.4Уравнение Фредгольма второго рода
- •4Методы оптимизации
- •4.1Метод наискорейшего спуска
- •4.2Минимизация функции многих переменных методом конфигураций
- •5Теория графов
- •5.1Способы задания графа
- •5.2Путь с минимальным количеством промежуточных вершин.(волновой алгоритм)
- •5.3Путь минимальной суммарной длины во взвешенном графе с произвольными весами для всех пар вершин.(алгоритм Флойда)
- •5.4Нахождение k путей минимальной суммарной длины во взвешенном графе с неотрицательными весами.(Алгоритм Йена)
- •5.5Построения минимального остовного дерева (Алгоритм Краскала)
- •6Сетевое программирование
2.2Конвертация разреженной матрицы из нормальной формы в формат rr(c)o
Процедура конвертирует матрицу содержащуюся в массиве A в формат RR(C)O. На выходе получаем: NNZ - число ненулевых элементов матрицы, IA,JA,AN - соответственно массивы используемые в представлении RR(C)O.
2.3Конвертация разреженной матрицы, представленной в формате rr(c)u в нормальную форму
Описание формата RR(C)U есть в статье о разреженных матрицах. На вход подаются переменные N,M - соответственно количество строк и столбцов матрицы, NNZ - число ненулевых элементов матрицы, IA,JA,AN - массивы используемые в представлении RR(C)U. На выходе получаем массив A содержащий искомую матрицу в нормальной форме. В начале работы алгоритм заполняет массив A нулями, в большинстве языков есть специальные команды, чтобы обнулить некоторый кусок памяти, лучше использовать их, так как обнуление массива в двойном цикле скажется на скоросте работы, особенно в случае, если матрица имеет значительные размеры
2.4Транспонирование разреженной матрицы, заданной в формате rr(c)u
На вход подаются переменные N,M - соответственно количество строк и столбцов матрицы, IA,JA,AN - массивы используемые в представлении RR(C)U. На выходе получаем массивы IAT,JAT,ANT содержащий искомую матрицу в форме RR(C)O, количество ненулевых элементов (IA[N]-1 число элементов массивов JA,AN,JAT,ANT) не изменяется, а количество строк исходной матрице равно количеству столбцов транспонированной и наоборот.
2.5Сложение двух матриц, заданных в формате rr(c)u.(1-й способ)
На вход подаются переменные N,M - соответственно количество строк и столбцов матриц, IA,JA,AN - массивы используемые в представлении RR(C)U матрицы A. IB,JB,AB - массивы используемые в представлении RR(C)U матрицы B. На выходе получаем массивы IC,JC,CN содержащий искомую матрицу в форме RR(C)U.
Алгоритм вначале формирует портрет матрицы С в массивах IC,JC, а затем заполняет массив CN значениями ненулевых элементов матрицы C. Можно исправить алгоритм сделав так, чтобы формирование портрета матрицы и заполнение массива CN проводилось одновременно, именно так устроен алгоритм, предъявленный ниже.
Есть одна маленькая проблема в работе алгоритма, а именно, если для некоторых i,j выполняется a[i,j]=-b[i,j] < >0, то в представлении результирующей матрицы элемент c[i,j] должен отсутствовать, но данный алгоритм не отслеживает эту ситуацию, поэтому возможно возникновение нулевых элементов в массиве СN.
Возникает вопрос для чего необходимо разбиение алгоритма сложения на два этапа? Все дело в том, что результат получается в формате RR(C)U, т.е. неупорядоченный по столбцам, вне зависимости от того были ли исходные матрицы в формате RR(C)O или нет, но поскольку вначале мы получаем портрет результирующей матрицы, то если после этого привести полученный портрет к формату RR(C)O, например, дважды выполнив алгоритм транспонирования матрицы, учитывая только портрет С, а уже затем заполнять массив CN, то в результате матрица С будет представлена в формате RR(C)O.
2.6Сложение двух матриц, заданных в формате rr(c)u.(2-й способ)
На вход подаются переменные N,M - соответственно количество строк и столбцов матриц, IA,JA,AN - массивы используемые в представлении RR(C)U матрицы A. IB,JB,AB - массивы используемые в представлении RR(C)U матрицы B. На выходе получаем массивы IC,JC,CN содержащий искомую матрицу в форме RR(C)U.
В отличии от предыдущего, данный алгоритм заполняет массивы IC,JC,NC за один проход, к тому же он проверяет возникновение ситуации, когда a[i,j]=-b[i,j] < >0 и не допускает появления в массиве CN нулевых элементов, правда это скажется на скорости работы.
Результирующая матрица представлена в формате RR(C)U, т.е. неупорядоченная по столбцам.