Для отсортированной последовательности посчитать среднее значение разницы между двумя соседними числами.
Или то же самое, но на SQL, в предположении, что есть таблица с одной колонкой, по которой построен индекс.
Ещё одна простая и очень старая задачка.
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
-
- Уже с Приветом
- Posts: 225
- Joined: 07 Aug 2000 09:01
- Location: Moscow, RU -> Chicago, IL
Ещё одна простая и очень старая задачка.
How about that? The average difference of entire sequence is a difference between every item, divided by count, or, difference between last and first item of sequence divided by count. O(n).
C/C++:
#define MAXN 1000;
float n[MAXN];
float avgdiff()
{
int i;
float sumdiff = 0;
for (i = MAXN-1; i > 0; i--)
{
sumdiff += n[i] - n[i-1];
}
return ( sumdiff/(MAXN-1) );
}
SQL:
CREATE TABLE mysequence
(
myfield float
)
SELECT
(MAX(myfield) - MIN(myfield))/(COUNT(myfield)-1)
FROM mysequence
By, Alexander.
[ 17-01-2002: Message edited by: AlexanderS ]</p>
C/C++:
#define MAXN 1000;
float n[MAXN];
float avgdiff()
{
int i;
float sumdiff = 0;
for (i = MAXN-1; i > 0; i--)
{
sumdiff += n[i] - n[i-1];
}
return ( sumdiff/(MAXN-1) );
}
SQL:
CREATE TABLE mysequence
(
myfield float
)
SELECT
(MAX(myfield) - MIN(myfield))/(COUNT(myfield)-1)
FROM mysequence
By, Alexander.
[ 17-01-2002: Message edited by: AlexanderS ]</p>
-
- Новичок
- Posts: 86
- Joined: 27 Feb 2001 10:01
- Location: Omsk , Russia
Ещё одна простая и очень старая задачка.
Боюсь ошибиться , но все гораздо проще :
нужно от последнего числа отнять первое
и все поделить на (n-1)
Вот :
srand((unsigned)time( NULL ) );
int a[10] ;
double s = 0 ;
double sumdiff = 0 ;
for(int tt = 0 ; tt<10 ; tt++)
{
a[tt]= rand()%100+100*tt;
if (tt==0) printf("a[0]= %d\n",a[tt]);
else if (tt>0)
{
s += a[tt]-a[tt-1] ;
printf("a[%d]= %d avg=%d\n",tt,a[tt],a[tt]-a[tt-1]);
}
}
double sss = (a[9]-a[0])/9;
printf(" s= %5.3f sss= %5.3f \n",s/9,sss);
нужно от последнего числа отнять первое
и все поделить на (n-1)
Вот :
srand((unsigned)time( NULL ) );
int a[10] ;
double s = 0 ;
double sumdiff = 0 ;
for(int tt = 0 ; tt<10 ; tt++)
{
a[tt]= rand()%100+100*tt;
if (tt==0) printf("a[0]= %d\n",a[tt]);
else if (tt>0)
{
s += a[tt]-a[tt-1] ;
printf("a[%d]= %d avg=%d\n",tt,a[tt],a[tt]-a[tt-1]);
}
}
double sss = (a[9]-a[0])/9;
printf(" s= %5.3f sss= %5.3f \n",s/9,sss);