Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

Анализ массива элементов   Найти похожие ветки 

 
Ш-К   (2007-03-06 09:21) [0]

Второй час бъюсь.

У меня есть набор данных:
RData = record
 Document: Int64;
 Condition: Int64;
end; {для документа выполняется кондиция}

В виде массива:
ArrData: array of RData;

Нужно найти Document все такие, что:
В ArrData для Document существовали все возможные Condition из ArrData.


 
clickmaker ©   (2007-03-06 09:40) [1]

и что? цикл, перебор, наверно


 
Сергей М. ©   (2007-03-06 09:41) [2]


> все возможные Condition


Это как ?


 
Ш-К   (2007-03-06 09:54) [3]

clickmaker ©   (06.03.07 09:40) [1]

> и что? цикл, перебор, наверно

Хоть на словах опишите тогда, если так тривиально.

Сергей М. ©   (06.03.07 09:41) [2]
> > все возможные Condition
>
>
> Это как ?

Все те, что можно встретить в рекордах в ArrData.
Нужно:
Document, для которого хоть одна Condition не существует, не выводить.


 
Сергей М. ©   (2007-03-06 09:58) [4]


> Ш-К   (06.03.07 09:54) [3]


Все равно не понятно ...

Иллюстрируй примером массива - что имеется на входе и что требуется получить  на выходе


 
ЮЮ ©   (2007-03-06 10:58) [5]

Построить матрицу количества вхождений Condition для всех Document.
Например:

function IndexOf(var Arr: TInt64DynArray; Value:Int64): integer;
begin
 // ищет в массиве Arr значение Value. Если не находит, то вставляет
 // возвражвет индекс найденного элемнта в массиве
 // для самлстоятельного выполнения :)
end;

function SelectAllConditionsDocument(ArrData: TArrData): TInt64DynArray;
var
 i, iDoc, iCond, cnt: integer;
 documents, conditions: TInt64DynArray;
 docConds: array of array of integer;
begin
 Result := nil;
 documents := nil;
 conditions := nil;
 for i := 0 to High(ArrData) do begin
   iDoc := IndexOf(documents, ArrData[i].Document);
   iCond := IndexOf(conditions, ArrData[i].Condition);
   if iDoc > High(docConds) then
     SetLength(docConds, iDoc - 1);
   if iCond > High(docConds[iDoc]) then
     SetLength(docConds[iDoc], iCond - 1);
   Inc(docConds[iDoc, iCond]);
 end;

 for iDoc := 0 to High(documents) do begin
   if Length(docConds[iDoc]) < length(conditions) then continue;
   cnt := 0;
   for iCond := 0 to High(docConds[iDoc]) do begin
     if docConds[iDoc, iCond] <> 0 then
       inc(cnt)
     else
       break;
   end;
   if cnt < length(conditions) then continue;
   IndexOf(Result, documents[iDoc]);
 end;
end;


 
Ш-К   (2007-03-07 09:28) [6]

Спасибо, конечно. Насилу осилил.



Страницы: 1 вся ветка

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.069 c
15-1173096896
Kerk
2007-03-05 15:14
2007.04.01
Федор Бондарчук снимает Обитаемый остров


3-1168326050
parasolka
2007-01-09 10:00
2007.04.01
Объединение TQuery


4-1163524472
Wadim
2006-11-14 20:14
2007.04.01
Как сделать обновление экрана как при нажатии кнопки Windows


15-1173445639
oldman
2007-03-09 16:07
2007.04.01
Как хорошая идея становиться кривой...


2-1173773830
Nec
2007-03-13 11:17
2007.04.01
Алгоритм поиска