Задача. Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каждой строке.
Помогите придумать алгоритм решения, не могу придумать, как организовать данную функцию!
Lapp
7.10.2009 6:43
Цитата(Sergey Shevtcoff @ 6.10.2009 22:45)
Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каждой строке.
Помогите придумать алгоритм решения, не могу придумать, как организовать данную функцию!
Для начала сделай функцию, которая возвращает количество одинаковых элементов по номеру строки. Примерно вот так (не проверял, набирал тут) :
type tMatrix=array[1..nx,1..ny]of integer;
var A: tMatrix;
...
function EqNum(k: integer): integer; var i,j,m,l: integer; begin m:=1; for i:=1 to ny-1 do begin l:=1; for j:=i+1 to ny do if A[i]=A[j] then Inc(l); if l>m then m:=l; end; EqNum:=m end;
Потом могут быть разные пути. Можно напрямую сортировать, переставляя строки в процессе сортировки, но это неэффективно. Эффективнее будет сделать одномерный массив записей (число одинаковых, номер) по числу строк и заполнить его за один проход. Потом этот массив отсортировать по первому полю, а затем уже переставить строки в соответствии со вторым полем (это тоже не совсем просто, если не заводить вторую матрицу)
Sergey Shevtcoff
7.10.2009 12:43
Lapp, спасибо за помощь, все понял! сделаем!
Гость
21.10.2009 3:11
1 задача решена? Может поделитесь исходником?)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.