按鍵精靈a星演算法
⑴ 按鍵精靈怎麼繞開障礙物,DNF有那麼多地圖不可能用A星演算法吧
這個用按鍵太難了,市面上的都是內存掛
⑵ 按鍵精靈快速排序(比冒泡更快更有效率的演算法)是怎麼樣的
冒泡排序為O(N^2),在排序過程中其實是效率較低的。在掃拍賣或者其他需要比拼速度的時候,時間就是金錢~越快越能搶佔先機。
今天我們介紹另一種更快更有效率的排序——快速排序,時間復雜度為O(n*logn)。
快速排序的演算法思想
快速排序採用了一種分治的策略,通常稱其為分治法(Divide-and-ConquerMethod)。
該方法的基本思想是:
1.先從數列中取出一個數作為基準數。(不要被這個名詞嚇到了,就是一個用來參照的數,待會你就知道它用來做啥的了)。
2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
3 . 再對左右區間重復第二步,直到各區間只有一個數。
白話講解演算法:
假設我們現在對「6 1 2 7 9 3 4 5 10 8」這個10個數進行排序。就讓第一個數6作為基準數吧。接下來,需要將這個序列中所有比基準數大的數放在6的右邊,比基準數小的數放在6的左邊。
方法其實很簡單:分別從初始序列「6 1 2 7 9 3 4 5 10 8」兩端開始「探測」。先從右往左找一個小於6的數,再從左往右找一個大於6的數,然後交換他們。這里可以用兩個變數i和j,分別指向序列最左邊和最右邊。我們為這兩個變數起個好聽的名字「哨兵i」和「哨兵j」。剛開始的時候讓哨兵i指向序列的最左邊(即i=1),指向數字6。讓哨兵j指向序列的最右邊(即=10),指向數字。
2014-8-29 13:45 上傳
下載附件 (9.51 KB)
首先哨兵j開始出動。因為此處設置的基準數是最左邊的數,所以需要讓哨兵j先出動,這一點非常重要(請自己想一想為什麼)。哨兵j一步一步地向左挪動(即j--),直到找到一個小於6的數停下來。接下來哨兵i再一步一步向右挪動(即i++),直到找到一個數大於6的數停下來。最後哨兵j停在了數字5面前,哨兵i停在了數字7面前。
2014-8-29 13:45 上傳
下載附件 (9.74 KB)
2014-8-29 13:45 上傳
下載附件 (8.13 KB)
現在交換哨兵i和哨兵j所指向的元素的值。交換之後的序列如下:
6 1 2 5 9 3 4 7 10 8
2014-8-29 13:45 上傳
下載附件 (9.74 KB)
2014-8-29 13:45 上傳
下載附件 (8.37 KB)
到此,第一次交換結束。接下來開始哨兵j繼續向左挪動(再友情提醒,每次必須是哨兵j先出發)。他發現了4(比基準數6要小,滿足要求)之後停了下來。哨兵i也繼續向右挪動的,他發現了9(比基準數6要大,滿足要求)之後停了下來。此時再次進行交換,交換之後的序列如下:
6 1 2 5 4 3 9 7 10 8
第二次交換結束,「探測」繼續。哨兵j繼續向左挪動,他發現了3(比基準數6要小,滿足要求)之後又停了下來。哨兵i繼續向右移動,糟啦!此時哨兵i和哨兵j相遇了,哨兵i和哨兵j都走到3面前。說明此時「探測」結束。我們將基準數6和3進行交換。交換之後的序列如下:
3 1 2 5 4 6 9 7 10 8
2014-8-29 13:45 上傳
下載附件 (8.28 KB)
2014-8-29 13:45 上傳
下載附件 (10.45 KB)
2014-8-29 13:45 上傳
下載附件 (8.48 KB)
到此第一輪「探測」真正結束。此時以基準數6為分界點,6左邊的數都小於等於6,6右邊的數都大於等於6。回顧一下剛才的過程,其實哨兵j的使命就是要找小於基準數的數,而哨兵i的使命就是要找大於基準數的數,直到i和j碰頭為止。
OK,解釋完畢。現在基準數6已經歸位,它正好處在序列的第6位。
3
1
2
5
4
6
9
7
10
8
此時我們已經將原來的序列,以6為分界點拆分成了兩個序列,左邊的序列是「3 1 2 5 4」,右邊的序列是「9 7 10 8」。接下來還需要分別處理這兩個序列。因為6左邊和右邊的序列目前都還是很混亂的。不過不要緊,我們已經掌握了方法,接下來只要模擬剛才的方法分別處理6左邊和右邊的序列即可。現在先來處理6左邊的序列現吧。
左邊的序列是「3 1 2 5 4」。請將這個序列以3為基準數進行調整,使得3左邊的數都小於等於3,3右邊的數都大於等於3。
3
1
2
5
4
第一次交換完:以3為分界點,拆分了兩個序列。左邊都比3小,右邊都比3大。
2
1
3
5
4
再分別處理3左右的兩個序列「2 1」和「5 4」
1
2
3
4
5
這樣,最初我們劃分的6左側的序列都已經處理好了~~我們再來處理6右側的序列
9
7
10
8
以9為基準數,第一次交換完:
9
7
8
10
第二次交換:
8
7
9
10
再交換一次:
7
8
9
10
這樣,我們整個序列就排序完畢了
1
2
3
4
5
6
7
8
9
10
快排演算法代碼實現:
su = "6|1|2|7|9|3|4|5|10|8"
su=Split(su, "|")
L = UBound(su)
Call ks(0, L)
Function ks(L, B)
If L > B Then
Exit Function
End If //判斷數組上標下標是否超出范圍
i = L
j = B
key =int( su(L) ) //數組第一位提取作為基數
While j>i
While int ( su(j)) >= key and j > i //要先從最右邊開始找 找到第一個小於key的數 這里添加的j>i的判斷是為了防止j的值不斷遞減導致下標越界
j = j - 1
Wend
While int (su(i)) <= key and j > i //從最左邊開始找 找到第一個大於key的數 (這里的字元串數組需要轉換為數值型)
i = i + 1
Wend
If j>i then // 將和基數key對比得到的兩個數對換 將大於key的值往右邊放 小於key的值往左邊放
T = su(i)
su(i) = su(j)
su(j) = T
End If
Wend // 這個 While 循環當i=j 第一輪比較完退出
su(L) = su(i) // 重新設置數組第一個元素為基數
su(i) = key// 基數歸位 (排完一輪之後 左邊的數<基數<右邊的數 那麼基數就到了排序中它該在的位置。)
Call ks(L, i - 1)//繼續處理左邊的數
Call ks(i + 1, B)//繼續處理右邊的數
End Function
For i = 0 To UBound(su)
TracePrint su(i)
Next
⑶ 好心人給按鍵精靈的演算法
找了好久,按鍵精靈有專門的函數的:Eval<pre t="code" l="vb">str = ;1+2*3;
out = Eval(str)
MessageBox out ;7
希望我的回答對你有幫助
⑷ 按鍵精靈坐標演算法問題
Dim x1, y1//假設(x1,y1)是前台坐標
Rect = Plugin.Window.GetClientRect(Hwnd)
MyArray = Split(Rect, "|")
x2 = Clng(MyArray(0))
y2 = Clng(MyArray(1))//(x2,y2)是游戲窗口客戶區左上角的坐標
x = x1 - x2
y = y1 - y2//(x,y)就是樓主所需的後台坐標
⑸ 按鍵精靈A星尋路插件,有用的么
完全依靠滑鼠點擊尋路的游戲用A新尋路才有點用,但是經常點擊錯誤!
現在的游戲都是滑鼠調整視覺,按鍵移動的,而且沒有自動尋路功能,用到內存都經常卡點!
你覺得現在用A星演算法還有什麼用
⑹ 按鍵精靈如何製作走1步才顯示下1步的,隨機迷宮的腳本
找個會A星演算法的高手來吧。。。
⑺ 按鍵精靈如何使用
進入編輯器,在主界面上點擊「新建腳本」,然後選擇「空白腳本」。