![]() |
#1 |
Участник
|
Поиск медианы
Добрый день.
Спешу поделиться алгоритмом поиска медины. Немного теории: Медиан - возможное значение признака, которое делит ранжированную совокупность (вариационный ряд выборки) на две равные части: 50 % «нижних» единиц ряда данных будут иметь значение признака не больше, чем медиана, а «верхние» 50 % — значения признака не меньше, чем медиана. Немного практики: Логика выполнения: - Отсортировать массив; - Если кол-во чисел четное, то найти среднее между серединными ячейками массива; - Если кол-во числе не четное, то взять серединную ячейку. X++: static real con2median(container _con) { container con; int lenCon = conLen(_con), i; real ret; anytype any; ; for(i = 1; i <= lenCon; i++) { any = conPeek(_con, i); con += any2real(any); } con = quickSort(con); info(con2Str_NV(con, '\n')); if(lenCon mod 2 == 0) { ret = conPeek(con, trunc(lenCon / 2)); ret += conPeek(con, trunc(lenCon / 2) + 1); ret = ret / 2; } else { ret = conPeek(con, trunc(lenCon / 2)); } return ret; } Я использую контейнер, т.к. при поиске медианы важны все данные. Set и Map убирает дубликаты. Друзья, если есть идеи по улучшению алгоритмы, то говорите. Буду рад узнать что-то новое. |
|
|
За это сообщение автора поблагодарили: AP-1055D (1). |
Теги |
axapta, медиана, ax2009 |
|
![]() |
||||
Тема | Ответов | |||
Как сделать в lookup поиск по нескольким полям | 6 | |||
Поиск набором в выпадающем списке.. | 0 | |||
"поиск" | 6 | |||
Поиск по подстроке | 8 | |||
Поиск по полю временной таблицы | 2 |
|