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

Вниз

Массивы.   Найти похожие ветки 

 
KIE   (2003-12-22 14:01) [0]

Кто знает как быстро сравнить два массива. Какие вообще есть быстрые методы оступа к массивам?


 
Юрий Зотов   (2003-12-22 14:06) [1]

1. Например, CompareMem.
2. Адресация со смещением. IMHO, компилятор ее и использует.


 
Digitman   (2003-12-22 14:09) [2]

var
Array1, Array2: String;
...
if Array1 = Array2 then ... else ...

чем не "быстрое сравнение массивов" ?


 
Skier   (2003-12-22 14:10) [3]

>Digitman © (22.12.03 14:09) [2]
:))


 
Digitman   (2003-12-22 14:13) [4]


> Skier


сейчас в меня помидоры полетят)


 
REA   (2003-12-22 14:36) [5]

>Какие вообще есть быстрые методы оступа к массивам?

Есть относительно быстрый метод доступа по указателю без индексов. Можно хэши хранить и сравнивать сначала их.


 
Anatoly Podgoretsky   (2003-12-22 14:42) [6]

Digitman © (22.12.03 14:13) [4]
Не за что, особенно учитывая вопрос.


 
Ангел.   (2003-12-22 19:41) [7]

1. Есть понятие линейная сортировка.. линейный доступ - жрет кучу памяти но внекоторыХ! случаях можно использовать доступ к элементам прямой;) 2. Смотря что хранить - если возможно сделать табличную структуру массива.

Уточни вопрос...


 
KIE   (2003-12-24 07:25) [8]

есть два массива A[x,y] и B[x1,y1]. "A" массив всегда больше "B". Хранятся в них единицы и ноли (Integer). Нам надо найти вхождение "B" массива в A. Причем делается так, берем B накладываем его на А, считаем, сколько точек несовпадает, вычисляем процент. Если процент несоответствия < 3 тогда считаем что B входит в A иначе .... делаем сдвиг B внутри A и проверяем дальше.


 
OlDemon   (2003-12-24 08:20) [9]

2 KIE>
если массивы одинаковые то сравнивать можно методом DigitMen"a [2]. Но учитываю задачу, тебе это не подходит. Создай функцию которая выдает процент несоответсвия и в цикле отправляй туда координаты из массива А, по которым можно сформировать массив идентичный В.


 
REA   (2003-12-24 09:58) [10]

Если перегнать массив в биты, то возможно некоторые операции удастся ускорить. Например логическое And даст совпадения по 8 точкам сразу.


 
Sha   (2003-12-24 12:00) [11]

> KIE © (24.12.03 07:25) [8]
А что в массивах-то? Отпечатки пальцев, что ли?


 
Digitman   (2003-12-24 12:18) [12]


> KIE © (24.12.03 07:25) [8]


ага... ну теперь понятно
и в чем у тебя сомнения ?


 
Brahman   (2003-12-24 12:41) [13]

Алгоритмы быстрой свертки (основа БПФ и других теоретико-числовых преобразований).
По существу нужна двумерная корреляционная функция.


 
KIE   (2003-12-24 16:41) [14]

Sha > ты почти прав!
Просто карта бывает большая, а искать надо быстро.

REA >> как с помощью AND можно проверить сразу 8 кординат?


 
REA   (2003-12-24 17:06) [15]

Кто говорил про координаты?
Допустим в массиве A есть 00110101, а в массиве B 11110000.
Логическое And даст 00110000. Не знаю насколько это быстрее и насколько соответствует задаче, но как вариант может быть рассмотрено.


 
Тимохов   (2003-12-24 17:10) [16]

Если все хранить в битах, то можно просто стравнивать побайтно командой "=".


 
KIE   (2003-12-25 14:24) [17]

Тимохов >> я и сравниваю с помощью "=". Надо сказать долговато. На весь процесс сравнения у меня уходит около 3 секунд, а это достатоно много!


 
Digitman   (2003-12-25 14:31) [18]

"быстрым сравнением массивов" в задаче и не пахнет


 
Тимохов   (2003-12-25 14:32) [19]

1. Неясно, какого размера у тебя массивы.
У меня тоже была потребность делать что-то быстро.
Сравнивал CompareMem. Она вроде как на асме - поэтому не понял как она это делает. Возникло подозрение, что может она сравнивает побайтно, может лучше сравнивать сразу по двойным словам. Попробовал написал свою comparemem с сравнением по двойным словам - выигрыша не было.
2. Думаю, что врядли ты быстрее придумаешь алгоритм.
3. Думаю, что в каких-то случаях можно сравнивать crc32 двух больших структур. Но думаю, это сильно зависит от задачи.


 
Тимохов   (2003-12-25 14:34) [20]

Кстати, никто не знает есть ли "аппаратное" сравнение двух областей памяти?


 
ALEIIIKA   (2003-12-26 14:09) [21]

>>Тимохов >> я и сравниваю с помощью "=". Надо сказать долговато. На весь >>процесс сравнения у меня уходит около 3 секунд, а это достатоно много!

Самые быстрые операции - это логические используй операцию XOR если два числа равны = результат равен = 0, однозначно.
В CPU Pentium аппаратного сравнения памяти нет. Увы.


 
Тимохов   (2003-12-26 14:18) [22]

ALEIIIKA © (26.12.03 14:09) [21].
Наверное, также как и копирования аппаратного тоже нет. Увы.


 
KIE   (2003-12-26 16:38) [23]

Большая карта, это черно-белое изображение, на котором что-то написано (напечатано), берем трафареты, т.е. малые массивы букв и цифр (43 штуки) и начинаем прогонять. Если совпадение есть то ... что то делаем, ели нет, то берем другой трафарет и поновой прокатываемся им по всей области "сканнируемого" изображения


 
REA   (2003-12-26 16:38) [24]

Ну можно почитать в журнале "программист" об оптимизации доступа к памяти и использовании кэшей статьи Касперского. Весьма полезные рекомендации.
А дай ка код кстати - может что ускорим.


 
KIE   (2003-12-26 16:48) [25]

REA >> если я выложу исходники мне начальство башню повернёт на 360, оторвет и выбросит - коммерческая тайна. Ана словах, пробег я делаю старым классическим циклом for?а сравниваю через "="


 
REA   (2003-12-26 17:06) [26]

Тебя никто не заставляет все выкладывать. А начальству мы не скажем.


 
Algol   (2003-12-26 18:15) [27]


> берем трафареты, т.е. малые массивы букв и цифр (43 штуки)
> и начинаем прогонять. Если совпадение есть то ...


Честно говоря сомневаюсь что простое сравнение в данном случае катит. Распознавание образов оч сложная задача, и уж простым сравнением с шаблоном точно не ограничивается ))


 
ALEIIIKA   (2003-12-27 11:24) [28]

Нам то нужен всего небольшой кусок кода, чтобы мы всем скопом могли его оптимизировать.
Не даром на Руси говорят: одна голова хорошо, а две лучше! (хм три уже много.)


 
Digitman   (2003-12-27 11:40) [29]


> Тимохов © (25.12.03 14:34) [20]


маш.инструкция rep[e/ne] cmps[b/w/d] и есть наилучший способ "аппаратного" сравнения


> KIE



> берем трафареты


для начала реализуй макстимально эффективный алгоритм выборки "трафаретов" в блок памяти, подлежащий "сравниванию" с блоком пямяти. хранящим оригинал для сравнения ... потом уж будет разговор о "сравнении" ... безусловно, следует представлять цвета точек одним битом, чтобы можно было эффективно использовать маш.инструкции маскирования, сдвига и пр.



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

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

Наверх





Память: 0.51 MB
Время: 0.01 c
1-37615
denick
2003-12-31 09:51
2004.01.13
Как удалить из TreeView`а один из Node,


1-37776
AGN
2003-12-29 16:04
2004.01.13
MessageBox + Edit


14-37891
BKGG
2003-12-20 13:22
2004.01.13
Как привязать .exe к .doc (.xls и т.д.) файлу.


14-37922
mosha
2003-12-20 19:32
2004.01.13
Предложение програмистам


4-37976
dar
2003-11-10 09:52
2004.01.13
Раскладка клавиатуры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский