Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Системное время в мс. Возможно? Добавлено: 29.10.05 20:03  

Автор вопроса:  Tamplier | ICQ: 298742928 

Ответить

  Ответы Всего ответов: 45  

Номер ответа: 16
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #16 Добавлено: 31.10.05 20:47
Время, затрачиваемое на сортировку уже сортированного массива не имеет ничего общего со временем сортировки неупорядоченного массива, и в большинстве случаев в разы меньше. Никакой информации этот тест с циклом не даст, кроме характеристик поведения алгоритма, если ему скормить сортированный массив.

Ответить

Номер ответа: 17
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #17 Добавлено: 31.10.05 21:52
Вах!

А я-то думал.

Зачем же у меня всегда два массива - исходный и сортируемый?

Ответить

Номер ответа: 18
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #18 Добавлено: 31.10.05 22:15
И где же они - эти "исходный и сортируемый" ?

А как понимать это:
сортировать один и тот же массив 10 раз.

Ответить

Номер ответа: 19
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #19 Добавлено: 31.10.05 22:18
Это примерно как съесть одну и ту же конфету 10 раз: первый раз будет вкусно, остальные девять - не очень :-/

Ответить

Номер ответа: 20
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #20 Добавлено: 31.10.05 22:38
Так наверное будет лучше:

    Dim counter As Long, tmr As Long, i As Long
    Dim my_array() As Long
    
    counter = 0
    For i = 0 To 9
        recreate_array (my_array) ' создаем массив заново
        tmr = GetTickCount
        'тут сортируем созданный заново массив
        counter = counter + GetTickCount - tmr
    Next i
    MsgBox counter / 10

Ответить

Номер ответа: 21
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #21 Добавлено: 01.11.05 00:37
А как понимать это:
сортировать один и тот же массив 10 раз.

Буквально.
Неотсортированный массив и отсортированный массив - два разных массива, потому что они не идентичны.
Сортировать один и тот же массив означает сортировать один и тот же исходный неотсортированный массив.

Ответить

Номер ответа: 22
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #22 Добавлено: 01.11.05 01:31
Хе-хе...
От того, что мы сортируем массив, у нас не создается новый (сортированый) при наличии старого (несортированого). Количество массивов как было, так и осталось равным 1. И ни о каких двух массивах речи идти не может.

Если конечно не создавать из элементов неупорядоченного массива новый массив упорядоченных элементов. Но это уже не есть сортировка в чистом виде.

Ответить

Номер ответа: 23
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #23 Добавлено: 01.11.05 01:50
А вообще, ни твой фрагмент кода, ни мой не обеспечат сколько-нибудь приемлимой точности на массиве размерностью 99 тыс. чисел.
У меня есть тестовый пример сортировки 10 млн. лонгов с получением времени через GetTickCount. Если кол-во элементов снизить до 100 тыс., то время от GetTickCount возвращается порядка 15-16 мс. А дисретность GetTickCount полагаю, тебе известна. И равна как раз этим величинам.

Можно конечно увеличить количество элементов, доведя до тех же 10 млн. Но тут есть подводный камень: некоторые пары сравниваемых алгоритмов могут вести себя совершенно противоположно при разных кол-вах элементов. Например алгоритм_а выигрывает на маленьких массивах у алгоритма_б, а на больших наоборот, проигрывает. Вполне объективные особенности того или иного алгоритма. Поэтому нужно мерять на количествах, максимально приближенных к реальным. А тут сказывается погрешность GetTickCount.

Ответить

Номер ответа: 24
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #24 Добавлено: 01.11.05 02:33
Именно для этого предлагается выполнить операцию много раз и разделить результат.

QueryPerformanceCounter рулит, но он иногда не поддерживается аппаратно, и тогда его нет.

Ответить

Номер ответа: 25
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #25 Добавлено: 01.11.05 03:24
Если делать как предлагаешь ты, то между вызовами GetTickCount выполняется не только сортировка, но и воссоздание исходного массива (или сортировка с созданием нового выходного массива), на что тоже требуется время. И это время (зачастую сопоставимое с временем самой сортировки) плюсуется в общее время. Если делать моим способом, то тут погрешность от GetTickCount на малых временах суммируется в общее время, что тоже не добавляет точности.

Возможно QueryPerformanceCounter и есть компромиссное решение.

Ответить

Номер ответа: 26
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #26
Добавлено: 01.11.05 12:10
Есть предложение, как провести n сортировок.
СНАЧАЛА создаем n исходных идентичных массивов. Затем сортируем их все. Тогда легко замерить время только сортировки. Но сколько это памяти займет - заранее сказать не могу. И если на компе мало оперативки, то тест сведется к проверке производительности жесткого диска... Так что действительно, QueryPerformanceCounter наверно лучше всего будет.

Ответить

Номер ответа: 27
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #27 Добавлено: 01.11.05 15:50
Ну, а я что предлагал? Замерять только время сортировки. Время воссоздания (например копирования эталонного) массива, или время переключения на другой не учитывать.
А вообще, если хочется теста, то надо нормально тестировать, а не ограничиваться доступными из VB методами (QueryPerformanceCounter etc.)

Ответить

Номер ответа: 28
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #28 Добавлено: 01.11.05 16:52
=)) смысл? =))

Ответить

Номер ответа: 29
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #29 Добавлено: 01.11.05 17:05
Никакого смысла :)
Всё уже давным давно посчитано, потестировано, измерено.
Идёшь на http://algolist.manual.ru и читаешь сравнительные характеристики алгоритмов сортировки. Выбираешь для себя тот или иной и юзаешь.

Ответить

Номер ответа: 30
Автор ответа:
 Tamplier



ICQ: 298742928 

Вопросов: 58
Ответов: 340
 Профиль | | #30 Добавлено: 01.11.05 17:32
На це или на дельфи, а лучше на ассемблере.
 

Проблема в том, что мне нужно именно СРАВНИТЬ разные варианты. И надо это сделать именно в вб. А асм я не знаю...
for i=1 to 10
  'сортировать один и тот же массив 10 раз.
next


Долго больно 10 раз. На создание 10 тыс уходит почти минута. Машина не слабая
А вот с тиккаунтом попробую. Заранее спасибо.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам