2
erwinsЦитата:
Существует ли обобщающая функция f(X, (x,x)->x) после свертки дающая...
Увы, совершенно не понятно, что вам нужно. Кстати, не представляю как вообще можно сортировку выполнять через свертку, надо подумать...
Хотя вопроса вашего не понял и искомую функцию предложить не смогу, но попробую пофантазировать.
Например, пусть вместо вашей "(x,x)->x" будет просто функция
g_sort с побочным эффектом, что-то вроде (это даже не псевдокод, а какой-то небрежный слепок потока сознания :) ):
Код:
y[]
g_sort(i, j)
{
if(j>=n-1) return;
if(y[j]>y[j+1])
swap(y[j], y[j+1]);
}
Это я её под сортировку пузырьком подогнал. Тогда
f будет примерно такой:
Код:
f(x[], g)
{
y=x;
for(i=0; i<length(x); i++)
for(j=0; j<length(y); j++)
g(i, j);
x=y;
}
А можно, существенно не изменяя
f, подсунуть ей вместо
g_sort другую функцию
g_dft:
Код:
g_dft(i, j)
{
re[i]+=y[j]*cos(2*pi*i*j/length(y));
im[i]-=y[j]*sin(2*pi*i*j/length(y));
}
В результате:
Код:
sort(x[]) {f(x, g_sort);}
fourier(x[]) {f(x, g_dft);}
Если свернуть побочные эффекты (офункционализировать код :) ) и реализовать более адекватную схему сортировки, e.g. вариацию на тему сортирующих сетей, то что-то близкое к требуемой вами
f(...) может быть и получится (а может быть в моей писанине и вовсе нет никакого смысла :) )...
Но как это связано с первоначальным вопросом? :)