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

Вниз

Поиск в массиве.   Найти похожие ветки 

 
Separator ©   (2002-12-06 11:10) [0]

Допустим существует массив из n-го количесва элементов типа integer, все разные. Есть ли в Delphi уже готовая функция, которая производит поиск в массиве нужного числа и возврощает его позицию?


 
MBo ©   (2002-12-06 11:13) [1]

да, называется For


 
Skier ©   (2002-12-06 11:16) [2]

>MBo
:)


 
Separator ©   (2002-12-06 11:16) [3]

:) Спасибо, это я знаю, но хотелось бы посмотреть и что-нибудь другое


 
Separator ©   (2002-12-06 11:18) [4]

А на asm кто-нибудь сможет это реализовать?


 
Anatoly Podgoretsky ©   (2002-12-06 11:21) [5]

Separator © (06.12.02 11:16)
Другое? Ну тогда while


 
Виктор Щербаков ©   (2002-12-06 11:21) [6]

...или Until


 
Anatoly Podgoretsky ©   (2002-12-06 11:21) [7]

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


 
MBo ©   (2002-12-06 11:24) [8]

вряд ли на asm будет намного быстрее, однако загляни сюда
http://delphibase.endimus.com/?action=viewfunc&topic=mathsearch&id=10160


 
Separator ©   (2002-12-06 11:26) [9]

for, while, repeat это конечно круто, но я б хотел чего-нибудь попроще типа:

function Find(Ar: array of integer; Value): integer;
asm
...
end;


 
Skier ©   (2002-12-06 11:27) [10]

>Separator
Ну дык...смотри ссылку MBo © (06.12.02 11:24)


 
Separator ©   (2002-12-06 11:29) [11]


> MBo © (06.12.02 11:24)

А как переделать? Чтоб в результате была позиция этого числа.


 
Separator ©   (2002-12-06 12:11) [12]

Ну так что?
Вот эта функция, осталось ее только переделать.

unction Among(N: Integer; const Values: array of Integer):LongBool;
asm
push ebx
xor ebx, ebx
@@10:
test ecx, ecx
jl @@30
cmp eax, [edx]
jne @@20
not ebx
jmp @@30
@@20:
add edx, 4
dec ecx
jmp @@10
@@30:
mov eax, ebx
pop ebx
end;

Повторюсь, в результате должна возвращаться позиция числа N в массиве.


 
Виктор Щербаков ©   (2002-12-06 12:46) [13]

function Among(N: Integer; const Values: array of Integer): Integer;
asm
push ebx
mov ebx, ecx
@@10:
test ecx, ecx
jl @@40
cmp eax, [edx]
jne @@20
sub ebx, ecx
mov eax, ebx
jmp @@30
@@20:
add edx, 4
dec ecx
jmp @@10
@@40:
mov eax, -1
@@30:
pop ebx
end;


 
MBo ©   (2002-12-06 12:48) [14]

function NPos(N: Integer; const Values: array of Integer):integer;
asm
push ebx
mov ebx, edx
@@10:
test ecx, ecx
jl @@40
cmp eax, [edx]
je @@30
add edx, 4
dec ecx
jmp @@10
@@30:
mov eax, edx
sub eax, ebx
shr eax,2
jmp @@50
@@40:
mov eax,-1
@@50:
pop ebx
end;


 
Separator ©   (2002-12-06 12:56) [15]

эээ спасибо, а чей более эффективный?


 
Separator ©   (2002-12-06 13:34) [16]

моногочислиными тестами было ваяснено, что вариант Виктора Щербакова более поизводителен, но правда на небольшое значение.


 
Виктор Щербаков ©   (2002-12-06 13:36) [17]

Separator © (06.12.02 13:34)
Делать тебе нечего :)


 
Separator ©   (2002-12-06 13:38) [18]

:)
А теперь усложню задачу. Нужно чтоб все это работало на сях под Linux (хотя это не имеет значения)


 
Ketmar ©   (2002-12-06 14:25) [19]

а на счетах вам не надо?

Satanas Nobiscum! 06-Dec-XXXVII A.S.


 
AL2002 ©   (2002-12-06 14:29) [20]

Как вариант могу предложить добавить все элементы массива в строку (с разделителями, конечно) и делать поиск в строке.
А чтоб возвратить позицию, нужно будет. чтобы в строку вписывалась и позиция.


Кстати, а почему бы стринглист не использовать? Там всё круто.


 
AL2002 ©   (2002-12-06 14:31) [21]


> Ketmar © (06.12.02 14:25)
>

:))))))))))))


 
Виктор Щербаков ©   (2002-12-06 14:36) [22]

AL2002 © (06.12.02 14:29)
А еще можно в таблицу БД запихать и select из этой таблицы :)
Нормальные люди, вообще-то for используют.


 
Ketmar ©   (2002-12-06 14:39) [23]

2AL2002:
фигня. надо поставить MS SQL, перегнать массив в таблицу, а дальше простым SELECT"ом можно все, что угодно делать.

Satanas Nobiscum! 06-Dec-XXXVII A.S.


 
Ketmar ©   (2002-12-06 15:07) [24]

упс. до меня уже предложили %-)

Satanas Nobiscum! 06-Dec-XXXVII A.S.


 
AL2002 ©   (2002-12-06 15:42) [25]


> Ketmar © (06.12.02 15:07)
> упс. до меня уже предложили %-)

Значит это — ИДЕЯ! :)


 
MrBeer ©   (2002-12-07 05:36) [26]

a hash-ed list po ljubomu bistree budet - skorost" O(1) protiv O(n) u obichnogo masiva



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

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

Наверх




Память: 0.52 MB
Время: 0.017 c
8-86038
kuzmich
2002-09-07 16:08
2002.12.26
PixelCheck в DelphiX


14-86171
Феликс
2002-12-06 00:53
2002.12.26
Может найдутся добрые люди


3-85827
sat
2002-12-06 14:58
2002.12.26
dll


3-85835
sndanil
2002-12-06 17:41
2002.12.26
Где хранятся индексы ?


7-86203
ALexe
2002-10-14 11:51
2002.12.26
статистика на Cisco 2600