Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Вниз

сортировка   Найти похожие ветки 

 
qoop   (2006-09-09 15:55) [0]

 PUUUType = ^TUUUType;
 TUUUType = record
   SomeData: string;
   LastTimeMs: DWord;
   Numbers: DWord;
 end;

 UUUTypes = array of PUUUType;


Есть массив заполненных записей, необходимо грамотно и быстро выбрать из этого массива наилучшую запись соответствующую например такому правилу: Numbers <- Min; ListeTimeMs <- Min

Т.е. найти в этом массиве запись с наименьшими значениями этих двух параметров. Очень нужен хороший и быстрый способ.


 
qoop   (2006-09-09 16:43) [1]

Ну-же господа, подскажите!


 
palva ©   (2006-09-09 17:00) [2]

Задача не совсем определенная. Возможно, что минимальный Numbers у одной записи, а минимальный ListeTimeMs - у другой. Нужно определиться что для вас важнее, после чего к примеру нужно искать сначала записи с минимальным Numbers, а уже среди них с минимальным ListeTimeMs. Сортировать записи для этого не требуется. Просто просматривайте записи сверху в низ и держите в отдельной переменной индекс записи-кандидата. Если очередная запись "меньше" чем кандидат, то замените кандидата (замените индекс). После окончания просмотра у вас будет минимальный элемент.


 
qoop   (2006-09-09 17:13) [3]

Я бред какой-то кодом написал наверное. Да я понимаю принцип, я сравниваю сразу два условия, вот мой код, но я не уверен в его оптимальности и быстроте. Может что подскажете?

var
 i: LongWord;
 UUUSpeed: TUUUType;
begin
for i := Low(UUUTypes) to High(UUUTypes) do
   with UUUTypes[i] do
   begin
     if (Numbers < UUUSpeed.Numbers) and (ListeTimeMs < UUUSpeed.ListeTimeMs) then
       UUUSpeed := UUUTypes[i];
   end;
end;


 
palva ©   (2006-09-09 17:27) [4]

Так можно, если индекс найденной записи вас не интересует. Только надо сделать начальное присваивание UUUSpeed, и проверять СНАЧАЛА один параметр, потом другой. Что у вас будет сначала - сами решайте.

var
i: LongWord;
UUUSpeed: TUUUType;
begin
UUUSpeed := UUUTypes[Low(UUUTypes)]
for i := Low(UUUTypes) + 1 to High(UUUTypes) do
  with UUUTypes[i] do
  begin
    if (Numbers < UUUSpeed.Numbers) or
      (Numbers = UUUSpeed.Numbers) and (ListeTimeMs < UUUSpeed.ListeTimeMs) then
      UUUSpeed := UUUTypes[i];
  end;
end;


 
qoop   (2006-09-09 18:00) [5]


> Так можно, если индекс найденной записи вас не интересует.

А что-то в конструкции изменит, если мне потребуется и индекс сохранить. Я полагаю, что просто сделаю вот так и это будет корректно работать. Я прав?


var
i, FIndex: LongWord;
...
begin
...
if (Numbers < UUUSpeed.Numbers) or (Numbers = UUUSpeed.Numbers) and ListeTimeMs < UUUSpeed.ListeTimeMs) then
 begin
  UUUSpeed := UUUTypes[i];
  FIndex := i;
 end;


 
palva ©   (2006-09-09 18:23) [6]

Будет. Только буква i уже занята под параметр цикла. Используйте например i_min. И перед циклом надо дать начальное значение индексу:
i_min := Low(UUUTypes);



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

Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.013 c
2-1158224284
Rolf
2006-09-14 12:58
2006.10.01
Список записей.


8-1111069004
Slawan
2005-03-17 17:16
2006.10.01
Текстовая информация в JPEG...


2-1158133464
greengeneral
2006-09-13 11:44
2006.10.01
Помогите начинающему программисту


15-1157782661
Дураг
2006-09-09 10:17
2006.10.01
Покритикуйте формулировку темы реферата на кандминимум.


15-1157895357
wwwrr
2006-09-10 17:35
2006.10.01
Кто перевидёт...???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский