![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сравить два массива. [D7, WinXP]
Gear © (2005-01-14 22:34:00)Как сравнить два массива статический и динамический и в случае если хотябы один элемент совпадает вывести его результат?
TUser (2005-01-15 11:33:00) [1]
> Gear (14.01.05 22:42) [3]
Гораздо быстрее получится, если предварительно отсортировать оба массива. Хотя, если 'не до тонкостей' - то используй [2].
PS. Но если делаешь это для галочки в зачетке - то лучше докопайся до тонкостей, а то тебе за квадратичный алгоритм галочку неправильную поставят, да еще и [8,9] припомнят :)
Юрий Зотов (2005-01-15 09:02:00) [2]> programania © (15.01.05 03:07) [8]
Это не новость. Только автору вопроса, судя по самому вопросу, пока еще явно не до тонкостей. Ему для начала принципы надо бы понять, а их лучше осваивать на простых схемах. Иначе лес может скрыться за деревьями.
> Gear
Смысл [8] в том, что при такой схеме перераспределение памяти произходит гораздо реже. То есть, снижаются дополнительные затраты времени на служебные операции. Например, можно посмотреть свойство TList.Capacity - там то же самое.
programania (2005-01-15 03:07:00) [3]>Юрий Зотов © (14.01.05 22:58) [5]
>SetLength(DynamicArray, Length(DynamicArray) + 1);
Для больших массивов >50000 такой способ нереальный
лучше выделять, например, по 1000
в начале:
setLength(DynamicArray,1001); qe:=0; we:=1000;
в цикле:
inc(qe);
if qe>we then begin
inc(we,1000); setLength(DynamicArray,we+1)
end;
DynamicArray[qe]:=строка;
так 2 массива 14000 и 65000 загружаются из файла за 8 сек.
а по одному за 8 минут и похоже зависимость N*N
Anatoly Podgoretsky (2005-01-14 23:51:00) [4]Может выгоднее использовать один или два TStringList, поскольку у него есть соответствующие методы.
Gear (2005-01-14 23:02:00) [5]спасибо!!!
Юрий Зотов (2005-01-14 22:58:00) [6]SetLength(DynamicArray, Length(DynamicArray) + 1);
DynamicArray[High(DynamicArray)] := строка;
Это в цикле, пока не будут считаны и занесены в массив все нужные строки.
Gear (2005-01-14 22:50:00) [7]а как заполнить динамический массив если неизвестна зарание его длина?
Gear (2005-01-14 22:42:00) [8]Спасибо Юрий большое!
Юрий Зотов (2005-01-14 22:41:00) [9]Например, так:
Result := -1;
for i := Low(StaticArray) to High(StaticArray) do
for j := 0 to High(DynamicArray) do
if StaticArray[i] = DynamicArray[j] then
begin
Result := j;
Exit
end;
Gear (2005-01-14 22:37:00) [10]Да, забыл основное. Динамический массив необходимо заполнить зарание из некоторых значений слов в тексте причём заранее неизвестно сколько их будет.