Страница: 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 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-сайт:
Профиль | | #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
Проблема в том, что мне нужно именно СРАВНИТЬ разные варианты. И надо это сделать именно в вб. А асм я не знаю...
'сортировать один и тот же массив 10 раз.
next
Долго больно 10 раз. На создание 10 тыс уходит почти минута. Машина не слабая
А вот с тиккаунтом попробую. Заранее спасибо.