Библиотека алгоритмов: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Строка 61: Строка 61:
На рисунках представлено изображение графа алгоритма без входных и выходных данных для случая перемножения двух квадратных матриц порядка 3</br></br></br></br></br></br></br></br></br></br></br>
На рисунках представлено изображение графа алгоритма без входных и выходных данных для случая перемножения двух квадратных матриц порядка 3</br></br></br></br></br></br></br></br></br></br></br>


=='''Нахождение суммы элементов массива сдваиванием'''==
=='''НАХОЖДЕНИЕ СУММЫ ЭЛЕМЕНТОВ МАССИВА СДВАИВАНИЕМ'''==
[[Файл:2_XYprojection.jpg|мини|XY projection]]
[[Файл:3_XYprojection.jpg|мини|XY projection]]
[[Файл:2_YZprojection.jpg|мини|YZ projection]]
[[Файл:2_XZprojection.jpg|мини|XZ projection]]
=====Ссылка на описание в энциклопедии AlgoWiki:=====
=====Ссылка на описание в энциклопедии AlgoWiki:=====
[https://algowiki-project.org/ru/Перемножение_плотных_неособенных_матриц_(последовательный_вещественный_вариант) Перемножение плотных неособенных матриц]</br>
[https://algowiki-project.org/ru/Нахождение_суммы_элементов_массива_сдваиванием Нахождение суммы элементов массива сдваиванием]</br>


=====Реализация алгоритма на Си:=====
=====Реализация алгоритма на Си:=====
for ( int i=0; i<size_1_str;i++)</br>
for(int i=1;i<=h;i++)</br>
:  for (int j=0; j<size_2_col;j++)</br>
:  for(int j=0;j<arr_size;j++)</br>
:  {</br>
::      if(j<(arr_size/(pow(2,i))))</br>
::      matrix_out[i][j]=0; </br>
:::        arr[j]=arr[j*2]+arr[2*j+1]; </br>
::      for(int k=0; k<size_common;k++) </br>
:::        matrix_out[i][j]+=matrix_1[i][k]*matrix_2[k][j]; </br>
:  }</br>


=====Описание алгоритма на Algolang:=====
=====Описание алгоритма на Algolang:=====
<algo></br>
<algo></br>
:    <params></br>
:    <params></br>
::      <param name="m" type="int" value="3"></param></br>
::      <param name="n" type="int" value="8"></param></br>
::      <param name="n" type="int" value="3"></param></br>
::      <param name="h" type="int" value="3"></param></br>
::      <param name="l" type="int" value="3"></param></br>
:    </params></br></br>
:    </params></br></br>


:    <block id="1" dims="3"></br>
:    <block dims="2"></br>
::      <arg name="i" val="1..m"></arg></br>
::      <arg name="i" val="0..h"></arg></br>
::      <arg name="j" val="1..l"></arg></br>
::      <arg name="j" val="1..n"></arg></br>
::      <arg name="k" val="1..n"></arg></br>
::      <vertex condition="(i<>0)and(j<=(n/(2^i)))" type="1"></br>
::       <vertex condition="k<>1" type="3"></br>
:::          <in src="i-1,j*2-1"></in></br>
:::          <in src="i,j,k-1"></in></br>
:::          <in src="i-1,j*2"></in></br>
::      </vertex></br>
::      </vertex></br>
:    </block></br>
:    </block></br>
</algo></br>
</algo></br>
На рисунках представлено изображение графа алгоритма без входных и выходных данных для случая перемножения двух квадратных матриц порядка 3</br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br>
На рисунке изображён граф алгоритма. В данном случае выполнено суммирование 8 элементов массива. Вершины, соответствующие входным данным, обозначены октаэдром.</br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br>

Версия от 22:29, 2 мая 2021

УМНОЖЕНИЕ МАТРИЦЫ НА ВЕКТОР

XY projection
YZ projection
XZ projection
Ссылка на описание в энциклопедии AlgoWiki:

Умножение плотной неособенной матрицы на вектор

Реализация алгоритма на Си:

for(int i = 0; i < size; i++)

for(int j = 0; j < size ; j++)
vec_out[i] += matrix[i][j] * vec _in[j];
Описание алгоритма на Algolang:

<algo>

<params>
<param name="size" type="int" value="5"></param>
</params>

<block dims="2">
<arg name="i" val="0..size-1"></arg>
<arg name="j" val="1..size"></arg>
<vertex condition="" type="2">
<in src="i,j-1"></in>
</vertex>
</block>

</algo>
На рисунках представлен результат для матрицы размером 5*5 и вектора длины 5



















ПЕРЕМНОЖЕНИЕ МАТРИЦ

XY projection
YZ projection
XZ projection
Ссылка на описание в энциклопедии AlgoWiki:

Перемножение плотных неособенных матриц

Реализация алгоритма на Си:

for ( int i=0; i<size_1_str;i++)

for (int j=0; j<size_2_col;j++)
{
matrix_out[i][j]=0;
for(int k=0; k<size_common;k++)
matrix_out[i][j]+=matrix_1[i][k]*matrix_2[k][j];
}
Описание алгоритма на Algolang:

<algo>

<params>
<param name="m" type="int" value="3"></param>
<param name="n" type="int" value="3"></param>
<param name="l" type="int" value="3"></param>
</params>

<block id="1" dims="3">
<arg name="i" val="1..m"></arg>
<arg name="j" val="1..l"></arg>
<arg name="k" val="1..n"></arg>
<vertex condition="k<>1" type="3">
<in src="i,j,k-1"></in>
</vertex>
</block>

</algo>
На рисунках представлено изображение графа алгоритма без входных и выходных данных для случая перемножения двух квадратных матриц порядка 3










НАХОЖДЕНИЕ СУММЫ ЭЛЕМЕНТОВ МАССИВА СДВАИВАНИЕМ

XY projection
Ссылка на описание в энциклопедии AlgoWiki:

Нахождение суммы элементов массива сдваиванием

Реализация алгоритма на Си:

for(int i=1;i<=h;i++)

for(int j=0;j<arr_size;j++)
if(j<(arr_size/(pow(2,i))))
arr[j]=arr[j*2]+arr[2*j+1];
Описание алгоритма на Algolang:

<algo>

<params>
<param name="n" type="int" value="8"></param>
<param name="h" type="int" value="3"></param>
</params>

<block dims="2">
<arg name="i" val="0..h"></arg>
<arg name="j" val="1..n"></arg>
<vertex condition="(i<>0)and(j<=(n/(2^i)))" type="1">
<in src="i-1,j*2-1"></in>
<in src="i-1,j*2"></in>
</vertex>
</block>

</algo>
На рисунке изображён граф алгоритма. В данном случае выполнено суммирование 8 элементов массива. Вершины, соответствующие входным данным, обозначены октаэдром.