Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Поиск в массиве / 5 сообщений из 5, страница 1 из 1
11.02.2006, 20:04:56
    #33539012
glazz_gms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в массиве
Добрый вечер знатоки!!!
Задача такова: Есть отсартированный по алфавиту строковый массив надо найти в нем определенную строку. Как это сделать максимально быстро. Перебором довольно долго. Есть другой метод?
Подскажите пожалуйста!!
...
Рейтинг: 0 / 0
12.02.2006, 09:22:37
    #33539307
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в массиве
если самая дорогая операция - это сравнение, то бинарным поиском
...
Рейтинг: 0 / 0
12.02.2006, 10:30:35
    #33539325
glazz_gms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в массиве
Подскажите это как?
...
Рейтинг: 0 / 0
13.02.2006, 09:03:09
    #33539903
Поиск в массиве
Да, линейный поиск самый медленный из всех возможных вариантов поиска.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Function fnBinarySearch( _
  varItems As Variant, _
  varFound As Variant) As Integer
  
    Dim intLower As Integer
    Dim intMiddle As Integer
    Dim intUpper As Integer
    
    intLower = LBound(varItems)
    intUpper = UBound(varItems)
    
    Do While intLower < intUpper
        intMiddle = (intLower + intUpper) \  2 
        
        If varFound > varItems(intMiddle) Then
            intLower = intMiddle +  1 
        Else
            intUpper = intMiddle
        End If
    Loop
    
    If varItems(intLower) = varFound Then
        fnBinarySearch = intLower
    Else
        fnBinarySearch = - 1 
    End If
End Function

Sub Test()
    Dim avarItems( 4 ) As Variant
    Dim intPos As Integer

    avarItems( 0 ) = "ААА"
    avarItems( 1 ) = "БББ"
    avarItems( 2 ) = "ВВВ"
    avarItems( 3 ) = "ГГГ"
    avarItems( 4 ) = "ДДД"
    
    intPos = fnBinarySearch(avarItems, "ДДД")
    
    If intPos = - 1  Then
        Debug.Print "Соответствий не найдено."
    Else
        Debug.Print avarItems(intPos); " найден в позиции"; intPos
    End If
End Sub
...
Рейтинг: 0 / 0
13.02.2006, 18:43:37
    #33541812
glazz_gms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в массиве
Спасибо, надо будет попробывать
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Поиск в массиве / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]