Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

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

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

Ответить

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

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



Вопросов: 0
Ответов: 1066
 Профиль | | #31 Добавлено: 01.11.05 17:39
Какой долго? Такой массив, который ты описал - 99тыс - сортируется ~10-15 мс. И примерно столько же создается по rnd. А тиккаунт, который ты собрался использовать, такие малые величины отследить не в состоянии.

Ответить

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



ICQ: 298742928 

Вопросов: 58
Ответов: 340
 Профиль | | #32 Добавлено: 01.11.05 17:41
Если конечно не создавать из элементов неупорядоченного массива новый массив упорядоченных элементов. Но это уже не есть сортировка в чистом виде.

хотя, это мне все равно придется проделывать...

QueryPerformanceCounter

сие что есть? И с чем его едят?

Идёшь на http://algolist.manual.ru и читаешь сравнительные характеристики алгоритмов сортировки. Выбираешь для себя тот или иной и юзаешь.

Фича не прокатит. Я проект сасостоятельно разрабатываю. И мне надо там описать все подробно и самостоятельно. (Проект на олимпаду)

Ответить

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



ICQ: 298742928 

Вопросов: 58
Ответов: 340
 Профиль | | #33 Добавлено: 01.11.05 17:43
Какой долго? Такой массив, который ты описал - 99тыс - сортируется ~10-15 мс. И примерно столько же создается по rnd.

Э неет :) Массив не просто так создается. Там нету чисел повторяюшихся.

Ответить

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



Вопросов: 0
Ответов: 1066
 Профиль | | #34 Добавлено: 01.11.05 19:09
Ну, блин, артист :) Может научишь создавать массивы? А то может я неправильно их создаю?

   Dim lngArr(0 To 100000) As Long, i As Long
    For i = 0 To 100000
        lngArr(i) = 2 * (Rnd(1) - 0.5) * Rnd(1) * (&H7FFFFFFF)
    Next i


Чтобы массив из 99 тыс. случайных (неповторяющихся) элементов создавать целую минуту, это надо очень сильно постараться :) Например я так долго создавать его не смогу :)
Больше чем 60 мс на создание массива - не получается :)

Ответить

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



Вопросов: 0
Ответов: 1066
 Профиль | | #35 Добавлено: 01.11.05 19:48
А если сделать, чтобы элементы были совсем-пресовсем неповторяющиеся, то вообще больше 30 мс не получается создавать массив:

    Dim arr(0 To 100000) As Long, i As Long, t As Single
    Dim n As Long, k As Long
    
    'заполняем массив неповторяющимися числами
    'от 0 до 100000 по порядку
    For i = 0 To 100000
        arr(i) = i
    Next i
    
    'теперь хорошенько перемешиваем массив
    'чтобы числа не шли подряд
    For i = 0 To 100000
        n = Rnd * 100000
        k = arr(i)
        arr(i) = arr(n)
        arr(n) = k
    Next i
    

Ответить

Номер ответа: 36
Автор ответа:
 «UL.eXe»



ICQ: 197.895.916.247 

Вопросов: 72
Ответов: 540
 Профиль | | #36 Добавлено: 01.11.05 20:44
И надо это сделать именно в вб. А асм я не знаю...


Гм..
А асм я не знаю...


  - а вб знаешь?
Ну какие тут олимпиады?.. :)
==
  Напиши для олимпиады что-то типа 'калькулятора', им понравится..
==
Ну какой массив, блин, с интервалом создания 60 сек., у меня на этот счет только два символа >> :)

Ответить

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



ICQ: 298742928 

Вопросов: 58
Ответов: 340
 Профиль | | #37 Добавлено: 02.11.05 18:17
Ну, блин, артист :) Может научишь создавать массивы? А то может я неправильно их создаю?

Как смогу - приведу код

Ну какие тут олимпиады?..

Простенькие и незамысловатые. Им этого хватает.

И вообще, как на счет того, чтобы от темы далеко не уходить, а?

Ответить

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



ICQ: 298742928 

Вопросов: 58
Ответов: 340
 Профиль | | #38 Добавлено: 04.11.05 15:29
Так, код точно не помню, но могу примерно предоставить.

sub DimRnd (arr as long)

    dim i as long, j as long
    
    for i=0 to UBound(arr)
        arr(i)=int(rnd*100000)*(-1)^int(rnd*2)
        for j=0 to i
            if arr(i)=arr(j) then
                i=i-1
                exit for
            End if
        next
    next

End sub

Ответить

Номер ответа: 39
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #39
Добавлено: 04.11.05 20:10
HOOLIGAN'а прошу не флудить.

Ответить

Номер ответа: 40
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #40
Добавлено: 05.11.05 11:30
int(rnd*100000)*(-1)^int(rnd*2)

Заметно медленнее, чем int(rnd*200000)-100000, чем реже вызывается рандом, тем быстрее работает программа, не говоря уж о том, что поиск во всей предыдущей части массива есть мастдай, попробуй создавать двоичное дерево и туда вставлять каждое новое число, на больших массивах будет значительно быстрее. Вырождаться оно, по причине псевдослучайности чисел, не должно.

Ответить

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



Вопросов: 0
Ответов: 1066
 Профиль | | #41 Добавлено: 05.11.05 13:13
Павел, насколько я понял, флудишь здесь ты.
Т.е. твоё сообщение в этой теме к программированию отношения никакого не имеет, в отличие от моих.

Ответить

Номер ответа: 42
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #42
Добавлено: 06.11.05 10:30
HOOLIGAN, я администратор, я слежу за порядком и имею право делать предупреждения о несоблюдении правил.

Логин блокирован на неделю. Перечитай правила форума.

Ответить

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



ICQ: 298742928 

Вопросов: 58
Ответов: 340
 Профиль | | #43 Добавлено: 07.11.05 16:16
попробуй создавать двоичное дерево

Не понял я их. :(( Может, кто доступным языком объяснит, а?

int(rnd*200000)-100000

А про такой вариант я забыл... Сам же этот вевлосипед когда-то изобрел...

поиск во всей предыдущей части массива есть мастдай

Хошь сказать дерево избавит от проблемы повторяющихся чисел? Если бы числа не повторялись, массив создавался бы гораздо быстрее.

Ответить

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



Вопросов: 0
Ответов: 1066
 Профиль | | #44 Добавлено: 07.11.05 19:24
Вот алгоритм, который составляет несортированый массив из 100000 неповторяющихся элементов,
случайным образом разбросаных в диапазоне -100000 ... +100000

    Dim arr(0 To 99999) As Long, i As Long, t As Single
    Dim n As Long, k As Long
    Dim temp_arr(0 To 199999) As Long
    Const EMPTY_CELL As Long = 777777

    t = Timer
    
    For i = 0 To 199999
        temp_arr(i) = EMPTY_CELL
    Next i
    
    n = 0
    For k = 0 To 99999
        n = Int(Rnd * 199999) - 99999
        While temp_arr(n + 99999) <> EMPTY_CELL
            n = Int(Rnd * 199999) - 99999
        Wend
        temp_arr(n + 99999) = n
    Next k
    
    n = 0
    For i = 0 To 199999
        If temp_arr(i) <> EMPTY_CELL Then
            arr(n) = temp_arr(i)
            n = n + 1
        End If
    Next i
    
    For i = 0 To 99999
        n = Rnd * 99999
        k = arr(i)
        arr(i) = arr(n)
        arr(n) = k
    Next i
    
    MsgBox Timer - t


Выполняет ту же задачу, что и твой код, но без поиска совпадающих элементов в массиве. Поиск не нужен по причине отсутствия совпадающих элементов.
Работает быстро - ок. 150 - 160 мс

Ответить

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



ICQ: 298742928 

Вопросов: 58
Ответов: 340
 Профиль | | #45 Добавлено: 11.11.05 19:29
Я кстати, вполне мог ошибиться, и 60 сек уходило на 50тыс элементов...
Но за код большое спасибо.

Ответить

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

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



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