GMC Bulgaria

Здравейте ( Вход | Регистрация )

Алгоритъм за разбъркване на масив, Много шум за 10 реда код...
TALANTO
коментар 10:25:41, 27-May-2010, Thursday
Коментар #1


BEST ENTRY award - зад.1/2008
Икона на група

Група: VIP
Коментари: 597
Регистриран: 19.04.07
Град: Kюстендил
Потребител № 539



Това е един алгоритъм за разбъркване на масив, който измислих една вечер и реализирах на скоро. Идеята е следната:
1 - инициализирам масива с числата от 0 до n;
2 - избирам произволен елемент на масива;
3 - слагам го на пъво място, а този който е бил на първо взима неговото.
Елементът който е с индекс 0 вече го считам за "разбъркан", затова при следващо избиране на произволен елемент него ще го прескачам.
2 - избирам произволен елемент от масива;
3 - този път той и втория елемен си разменят местата.
Цикълът се повтаря докато не стигна n-1 избиране на елемент.

Ето го и самият код:
Код
n=10
for(i=0; i<n; i+=1)
    array[i]=i

for(i=0; i<n-1; i+=1){
    rand=floor(random(n-i)+i)
    temp=array[i]
    array[i]=array[rand]
    array[rand]=temp
}

Ето и една снимка с малко разяснения:
Хоризонтално са различни масиви;
Вертикално са елементите на всеки масив.


Какво е предимството:
-При тестване на три алгоритъма за разбъркване на 1 000 и дори 10 000 елемента този се оказа най-бърз.
-Този цикъл не прави излишни избирания на елементи и излишни проверки. Като пример мога да покажа един стар алгоритъм, който измислих преди доста време:
Код
n=1000
for(i=0; i<n; i+=1)
    array[i]=0

for(i=0; i<n; i+=1){
    array[i]=floor(random(n))
    
    for(j=0; j<i; j+=1)
        if array[i]=array[j]{
            i-=1
            break
        }
}
Представете си като стигне до момента в който с random(1000) трябва да се падне точно едно число. Да не говорим за по-голям масив. Другия алгоритъм с който го сравнявах (негов автор е krisis, измислен специално за играта "Сварка"), също имаше проверки, но беше доста по-бърз от този два реда по-нагоре. Остана да го тествам с алгоритъм на RaGiNGWhiSpeR, направен за играта "Сделка или не".

Приложение:
-Ако правите игра с карти естествено те трябва да се разбъкват, но да не се повтарят. Това е перфектно решение на проблема.

Като заключение ще кажа че този алгоритъм е изцяло мой, но не изключвам възможността някой преди мен да го е измислил. Просто не съм потърсил в интернет.

Качвам и програмката за тестване:
Прикачен файл  array_randomize.gmk ( 9.17k ) Брой сваляния: 3


--------------------
"Последно: 18:05:07, 21.09.12" След две години мълчание пак проговори...
ИГРИ И ПРИМЕРИ НА САЙТА МИ!.
Go to the top of the page
 
+Quote Post

Пишете в тази тема


Reply to this topicStart new topic
1 потребител(и) четат тази тема (1 гости и 0 скрити)
0 Потребител(и):

 



Олекотена версия Час: 05:46:09, 04.07.25