欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

詳解DeepMind排序算法

AI科技大本營 ? 來源:CSDN ? 2023-06-21 15:38 ? 次閱讀

近日,DeepMind在博客發(fā)表了一篇闡述排序算法內(nèi)核的論文。他們借鑒了構建 AlphaGo 積累的有關深度學習的經(jīng)驗,并將其應用于超優(yōu)化。這激起了我的興趣,因為作為一名 C 語言庫的作者,我一直在尋找機會來提供最好的工具。從某些方面來說,這是 C 語言庫的最終目的。雖然有些功能程序員已經(jīng)習以為常了,但實際上它們是數(shù)十年研究的結晶,反復提煉而成的簡單且可移植的代碼。DeepMind 的這一發(fā)現(xiàn)確實居功至偉,但不幸的是,他們未能解釋清楚算法。下面,我們來詳細看看他們發(fā)布的一段匯編代碼,這是一個包含三個元素的數(shù)組的排序,我們將偽匯編轉(zhuǎn)換為匯編:
/ move37.S
 .equ P,%rax
 .equ Q,%rcx
 .equ R,%rdx
 .equ S,%rsi
move37: mov (%rdi),P
 mov 8(%rdi),Q
 mov 16(%rdi),R
 mov R,S
 cmp P,R
 cmovg P,R
 cmovl P,S
 cmp S,Q
 cmovg Q,P
 cmovg S,Q
 mov R,(%rdi)
 mov Q,8(%rdi)
 mov P,16(%rdi)
 ret
 .type move37,@function
 .size move37,.-move37
 .globl move37
// deepsort1.c
#include
void move37(long *);
int main() {
 long A[3] = {3, 1, 2};
 move37(A);
 printf("%d %d %d
", A[0], A[1], A[2]);
我將此函數(shù)命名為 move37(),因為 DeepMind 在文章中將其與 2016 年 AlphaGo 在與李世石的第二場比賽中的第 37 步進行了比較。這一步讓專家們感到震驚,他們都認為 AlphaGo 走錯了,但實際上錯的是專家們,因為 AlphaGo 最終戰(zhàn)勝了對手。下面,我們來運行 DeepMind 的代碼:
# run this on the shell
cc -o deepsort1 deepsort1.c move37.S
./deepsort1
2 1 3
在我看來,這個運行結果有錯。我提供的數(shù)組是 {3, 1, 2} ,但排序結果為 {2, 1, 3}。一定是 DeepMind 在騙我們,因為 2 確實不應該出現(xiàn)在 1 之前。我們來看看他們?yōu)殚_源庫 LLVM libcxx (https://reviews.llvm.org/D118029)貢獻的代碼,看看能否澄清這個問題:
// Ensures that *__x, *__y and *__z are ordered according to the comparator __c,
// under the assumption that *__y and *__z are already ordered.
template
inline _LIBCPP_HIDE_FROM_ABI void __partially_sorted_swap(
 _RandomAccessIterator __x, _RandomAccessIterator __y,
 _RandomAccessIterator __z, _Compare __c) {
 using value_type = typename iterator_traits<_RandomAccessIterator>::value_type;
 bool __r = __c(*__z, *__x);
 value_type __tmp = __r ? *__z : *__x;
 *__z = __r ? *__x : *__z;
 __r = __c(__tmp, *__y);
 *__x = __r ? *__x : *__y;
 *__y = __r ? *__y : __tmp;
}
原來如此。這么說實際上 move37() 并不是排序函數(shù)。它是一個排序內(nèi)核,是函數(shù)的 sort3() 的一部分。如果 DeepMind 的論文和博客文章能提到這一點就好了,因為初看之下確實很迷惑。下面是改進版的代碼,包括缺少的交換操作。
sort3: mov (%rdi),%rcx
 mov 8(%rdi),%rdx
 mov 16(%rdi),%rsi
 mov %rdx,%rax
 cmp %rdx,%rsi
 cmovl %rsi,%rax
 cmovl %rdx,%rsi
 mov %rcx,%rdx
 cmp %rcx,%rsi
 cmovl %rsi,%rdx
 cmovl %rcx,%rsi
 cmp %rax,%rdx
 cmovge %rax,%rcx
 cmovl %rax,%rdx
 mov %rcx,(%rdi)
 mov %rdx,8(%rdi)
 mov %rsi,16(%rdi)
 ret
 .globl sort3
 .size sort3,.-sort3
為了解釋這段代碼的重要性,我們來考慮一下這個算法在高層面的應用。在第一次嘗試自己解決 sort3() 問題時,我想到了下面這段簡短的代碼:
// sorts [a,b,c]
 if (a > b) SWAP(a, b);
 if (a > c) SWAP(a, c);
 if (b > c) SWAP(b, c);
回頭查看 libcxx,發(fā)現(xiàn)他們在做同樣的事情。上述代碼的問題是編譯器無法很好地優(yōu)化。如果嘗試編譯上面的代碼,你會注意到編譯器插入了很多分支指令。這就是 DeepMind 試圖改進的地方,他們有更聰明的方法來編寫這類代碼。然而,這些技巧往往不太容易理解。實際上,我喜歡比較直白的代碼,因為比較一下就會發(fā)現(xiàn),這些代碼與 DeepMind 最先進的匯編代碼的基本思路相同。從根本上說,這個問題的基本思想可以歸結為三個比較和交換操作:
mov %rdx,%rax  // create temporary
 cmp %rdx,%rsi  // compare
 cmovl %rsi,%rax  // conditional move
 cmovl %rdx,%rsi  // conditional move
/ repeat thrice
上述代碼是預先對網(wǎng)絡進行排序的最新技術。下面是 DeepMind 的新發(fā)現(xiàn)發(fā)揮作用的地方。他們發(fā)現(xiàn)上面的 mov 指令有時是不必要的。
sort3: mov (%rdi),%rcx
 mov 8(%rdi),%rdx
 mov 16(%rdi),%rsi
 mov %rdx,%rax
 cmp %rdx,%rsi
 cmovl %rsi,%rax
 cmovl %rdx,%rsi
 mov %rcx,%rdx
 cmp %rcx,%rsi
 cmovl %rsi,%rdx
 cmovl %rcx,%rsi
 mov %rdx,%rcx  // <-- wrekt by AlphaDev
 cmp %rax,%rdx
 cmovge %rax,%rcx
 cmovl %rax,%rdx
 mov %rcx,(%rdi)
 mov %rdx,8(%rdi)
 mov %rsi,16(%rdi)
 ret
嘗試運行上面的代碼,你會發(fā)現(xiàn)無論那行被刪除的代碼是否存在,運行結果都是 100% 正確的。這行代碼看似有用,但實際上什么也沒做。因此,幾十年來計算機科學都沒有注意到這個問題,我并不感到驚訝。到這里,AlphaDev 的工作原理也應該變得更加清晰了。從根本上說,DeepMind 構建了一個人工智能,用于檢查匯編代碼,并隨機刪除一些代碼,看看代碼是否會出問題。我這么說并不是要否定 AlphaDev 的智慧,因為我也做了相同的嘗試。
sort3: mov (%rdi),%rcx
 mov 8(%rdi),%rdx
 mov 16(%rdi),%rsi
 mov %rdx,%rax  // can it go?
 cmp %rdx,%rsi
 cmovl %rsi,%rax
 cmovl %rdx,%rsi
 mov %rcx,%rdx  // can it go?
 cmp %rcx,%rsi
 cmovl %rsi,%rdx
 cmovl %rcx,%rsi
 mov %rdx,%rcx  // <-- wrekt by AlphaDev
 cmp %rax,%rdx
 cmovge %rax,%rcx
 cmovl %rax,%rdx
 mov %rcx,(%rdi)
 mov %rdx,8(%rdi)
 mov %rsi,16(%rdi)
 ret
另外,DeepMind 的代碼還有一些值得商榷之處。上面的代碼中還有兩條可以去除的 mov 指令,我們可以使用 ARM64 指令集,針對此類問題生成更精簡的代碼。可以看到,此處我們不需要任何創(chuàng)建臨時變量的指令:
sort4: ldp x1,x2,[x0]
 ldr x3,[x0,16]
 cmp x2,x3
 csel x4,x2,x3,le
 csel x2,x2,x3,ge
 cmp x2,x1
 csel x3,x2,x1,le
 csel x2,x2,x1,ge
 cmp x4,x3
 csel x5,x1,x4,gt
 csel x4,x4,x3,ge
 stp x5,x4,[x0]
 str x2,[x0,16]
 ret
最近 Arm 風靡一時,我想上面的例子證實了他們不負盛名。Arm Limited 也是目前開源領域最樂善好施的公司之一。例如,他們的 MbedTLS 庫是我迄今為止見過的最被低估的珍寶之一。在使用這個庫的時候,我就想過修改 Arm 的代碼以在 x86 硬件上更好地工作。我編寫了所有這類的匯編優(yōu)化,將性能提升到與在 x86 上運行 OpenSSL 相同的水平。MbedTLS 是簡單的、可移植的、可修改的 C 代碼,因此對于任何想要一個簡明易懂的匯編加密庫的人來說,這都是個好消息。我將自己的做法告訴了 Arm,雖然他們并不覺得有顛覆性,但仍然給予了友善的鼓勵。我希望有一天抽出時間學習 DeepMind 的做法,修改我的上游代碼。Arm 的 Optimized Routines 庫也非常豐富,該庫的雙精度數(shù)轉(zhuǎn)換在質(zhì)量上無可挑剔。對于 C 庫來說,這個庫的幫助特別大,因為幾十年來,開源社區(qū)一直依靠 Sun Microsystems 于 90 代初編寫的數(shù)學函數(shù)。Arm 找到了改進其中幾個函數(shù)的方法,例如 pow(x,y)。這可是最基本的數(shù)學運算之一,因此可以想象其影響力之大。例如,如果你使用 Arm 的解決方案在 x86 機器上實現(xiàn) pow(x,y),那么執(zhí)行相同操作的速度將比英特爾的原生 x87 指令快 5 倍。很幸運 DeepMind 也加入了這個游戲,我冒昧地將他們的 libcxx diff 轉(zhuǎn)換成了簡單易讀的 C 代碼,這樣每個人都能欣賞到它的美麗。這是我希望 DeepMind 的論文和博客文章改進的另一個地方,因為你會在這段代碼中發(fā)現(xiàn)專家用來讓編譯器生成無分支 MOVcc 指令的規(guī)范技巧。
// sorts [a,b]
static inline void Sort2(long *a, long *b) {
 int r = *a < *b;
 long t = r ? *a : *b;
 *b = r ? *b : *a;
 *a = t;
}
// sorts [a,b,c] assuming [b,c] is already sorted
static inline void PartialSort3(long *a, long *b, long *c) {
 int r = *c < *a;
 long t = r ? *c : *a;
 *c = r ? *a : *c;
 r = t < *b;
 *a = r ? *a : *b;
 *b = r ? *b : t;
}
// sorts [a,b,c]
static inline void Sort3(long *a, long *b, long *c) {
 Sort2(b, c);
 PartialSort3(a, b, c);
}
// sorts [a,b,c,d]
static inline void Sort4(long *a, long *b, long *c, long *d) {
 Sort2(a, c);
 Sort2(b, d);
 Sort2(a, b);
 Sort2(c, d);
 Sort2(b, c);
}
// sorts [a,b,c,d,e]
static inline void Sort5(long *a, long *b, long *c, long *d, long *e) {
 Sort2(a, b);
 Sort2(d, e);
 PartialSort3(c, d, e);
 Sort2(b, e);
 PartialSort3(a, c, d);
 PartialSort3(b, c, d);
}
看到 Sort5() 函數(shù)后,我覺得自己對 DeepMind 研究的動機有了更好的理解。在 ARM64 上編譯 Sort5() 函數(shù),編譯器將生成一個包含 11 個寄存器的函數(shù)。你在推導一個數(shù)學方程式時,大腦里能否時同時思考 11 個變量?可能不行,這就是我們依賴 PartialSort3 這類內(nèi)核函數(shù)的原因。作為有感知力的生物,人類與猴子并沒有太大區(qū)別。我們變得更加聰明的主要因素是我們能夠解決難題,并將其分解為更小的問題。因此,很高興看到深度學習應用于增強我們的抽象能力。此外,還有一點值得一提,Sort3() 和 Sort5() 本身就是內(nèi)核,因為它們的目標就是成為傳統(tǒng)排序功能的構建塊。DeepMind 的博客文章涵蓋了這個主題,但我認為分享一些可移植和可執(zhí)行的代碼可能會很有幫助。
static inline void InsertionSort(long *A, long n) {
 long i, j, t;
 for (i = 1; i < n; i++) {
 t = A[i];
 j = i - 1;
 while (j >= 0 && A[j] > t) {
 A[j + 1] = A[j];
 j = j - 1;
 }
 A[j + 1] = t;
 }
}
void longsort(long *A, long n) {
 long t, p, i, j;
 switch (n) {
 case 0:
 return;
 case 1:
 return;
 case 2:
 return Sort2(A, A + 1);
 case 3:
 return Sort3(A, A + 1, A + 2);
 case 4:
 return Sort4(A, A + 1, A + 2, A + 3);
 case 5:
 return Sort5(A, A + 1, A + 2, A + 3, A + 4);
 default:
 if (n <= 32) {
 InsertionSort(A, n);
 } else {
 for (p = A[n >> 1], i = 0, j = n - 1;; i++, j--) {
 while (A[i] < p) i++;
 while (A[j] > p) j--;
 if (i >= j) break;
 t = A[i];
 A[i] = A[j];
 A[j] = t;
 }
 LongSort(A, i);
 LongSort(A + i, n - i);
 }
 break;
 }
}
上述算法展示了 libcxx 的新功能和改進。基本上就是快速排序,只是在遞歸到較小的切片時切換到排序內(nèi)核和插入排序。對于 libcxx,我認為他們甚至在堆排序中多加了一個步驟,雖然有點慢,但可以防止惡意代碼破壞棧。此時,可能你最想知道的是,我可以使用這個排序算法嗎?這些排序網(wǎng)絡內(nèi)核真的能提高排序速度嗎?我認為答案需要視情況而定。如果你只想對 long 進行升序排序,上面的代碼將比 C 庫提供的標準 qsort() 函數(shù)快 2 倍。而且你還不需要內(nèi)核來處理。到目前為止,我確定的是,在我的個人計算機(搭載了英特爾酷睿 i9-12900KS)上,上述函數(shù)對 long 進行排序的速度為每秒 255 兆字節(jié)。但是,如果我注釋掉排序內(nèi)核:
void longsort(long *A, long n) {
 long t, p, i, j;
 switch (n) {
 case 0:
 return;
 case 1:
 return;
 /* case 2: */
 /* return Sort2(A, A + 1); */
 /* case 3: */
 /* return Sort3(A, A + 1, A + 2); */
 /* case 4: */
 /* return Sort4(A, A + 1, A + 2, A + 3); */
 /* case 5: */
 /* return Sort5(A, A + 1, A + 2, A + 3, A + 4); */
 default:
 if (n <= 32) {
 InsertionSort(A, n);
 } else {
 for (p = A[n >> 1], i = 0, j = n - 1;; i++, j--) {
 while (A[i] < p) i++;
 while (A[j] > p) j--;
 if (i >= j) break;
 t = A[i];
 A[i] = A[j];
 A[j] = t;
 }
 LongSort(A, i);
 LongSort(A + i, n - i);
 }
 break;
 }
}
longsort() 函數(shù)的排序速度可以達到每秒 275 兆字節(jié)。我在簡化算法后,又實現(xiàn)了 7% 的性能提升。這個函數(shù)就是 libc 在加載可執(zhí)行文件時對 elf 符號表進行排序時使用的函數(shù)。long 的好處是,它的長度足以存儲一個 int 鍵值對。能夠快速排序映射項是非常有用的技巧。結合樸素快速排序與樸素插入排序是我迄今為止找到的最佳解決方案,因為我必須平衡規(guī)模和性能。上面的函數(shù)編譯后只有 181 字節(jié)的 x86-64 機器碼。由于 DeepMind 的 sort3() 只有 42 字節(jié),我希望我可以犧牲一些大小來獲得性能優(yōu)勢。因為到目前為止我發(fā)現(xiàn)的第二佳算法是基數(shù)排序,性能可達每秒 400 MB,除了依賴于 malloc() 之外,還需要高達 763 字節(jié)的二進制。所以很高興看到這些內(nèi)核的表現(xiàn)更好。我并不是說 DeepMind 的想法沒有價值。我認為值得注意的是,去年 DeepMind 非??犊毓_了矢量化快速排序庫(當時還是 Google Brain),并以此實現(xiàn)了永遠無法挑戰(zhàn)的排序霸權。在我的電腦上,使用 Vqsort 對 long 進行排序的速度為每秒 1155 MB,甚至略勝于 djbsort,后者是開源社區(qū)中最受歡迎的庫之一,盡管除了 int 之外并沒有推廣至更多的數(shù)據(jù)類型。兩種實現(xiàn)方式都是通過向量化排序網(wǎng)絡來實現(xiàn)的。我認為這就是排序網(wǎng)絡技術大放異彩的地方。我想,如果不是 AlphaDev 的智能實體還處于起步階段,它也會采用這種做法。如果從第一原則開始,僅支持基礎指令集就非常困難。我認為再等一等,我們可以期待 AlphaDev 未來會取得偉大的成就,因為它會努力應對更艱巨的挑戰(zhàn)。此外,DeepMind 壓縮了算法的規(guī)模,這一點我也很喜歡,因為這并不常見。極限規(guī)模編程是我的愛好之一。我曾在一篇博客文章中發(fā)布過一個用于 lambda 演算的虛擬機只有 383 字節(jié),還有一個擁有垃圾收集功能的 lisp 機器,只有 436 字節(jié)。我也曾在博客中介紹優(yōu)化 cosmpolitan c 庫大小的技巧。我也喜歡 DeepMind 的母公司谷歌,幾周前谷歌授予了我一份開源伙伴的獎金,很高興看到他們也對壓縮代碼規(guī)模充滿了熱情。很高興看到他們用我的庫來改進向量化快速排序。我只是希望全世界最佳 long 排序不要因為多加了 24 KB 的二進制編碼而變成 C++ 龐然大物。僅升序排序就有 23,000 行匯編代碼。我迫切希望有一天看到 AlphaDev 能夠?qū)@些代碼下手。最后,我喜歡一家人工智能公司建造用機器語言編寫代碼的機器的想法。為什么他們不喜歡這個想法呢?成為機器是機器的本性。作為一名開發(fā)人員,我發(fā)現(xiàn) OpenAI 正在創(chuàng)造的未來缺乏這樣的想法,他們建立了一個偉大的大型家長式機器,在零和經(jīng)濟中與地球上的每一位開發(fā)者競爭,然后吸引世界各地的租客通過政府監(jiān)管來控制那臺機器。OpenAI 承諾要自動化所有的任務,包括我最喜歡的編程,但他們正在努力創(chuàng)造的未來并不是在朝著這個方向前進。我想要的是能夠控制一臺能夠完成我自己無法完成的事情的機器,比如發(fā)現(xiàn)排序內(nèi)核。這才是真正的進步,我認為我們可以去除的每一行匯編代碼都是朝著這個夢想積極邁出的一步。



聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4631

    瀏覽量

    93398
  • 機器語言
    +關注

    關注

    0

    文章

    35

    瀏覽量

    10778
  • DeepMind
    +關注

    關注

    0

    文章

    131

    瀏覽量

    10951

原文標題:詳解 DeepMind 排序算法

文章出處:【微信號:AI科技大本營,微信公眾號:AI科技大本營】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA排序-冒泡排序介紹

    排序算法是圖像處理中經(jīng)常使用一種算法,常見的排序算法有插入排序、希爾
    發(fā)表于 07-17 10:12 ?1156次閱讀
    FPGA<b class='flag-5'>排序</b>-冒泡<b class='flag-5'>排序</b>介紹

    十大排序算法總結

    排序算法是最經(jīng)典的算法知識。因為其實現(xiàn)代碼短,應該廣,在面試中經(jīng)常會問到排序算法及其相關的問題。一般在面試中最常考的是快速
    的頭像 發(fā)表于 12-20 10:39 ?1171次閱讀

    嵌入式stm32實用的排序算法 - 交換排序

    合很多,我這里就不再一一舉例說明,掌握排序的基本算法,到時候遇到就有用武之地。Ⅱ、排序算法分類1.按存儲分類:內(nèi)部排序和外部
    發(fā)表于 04-12 13:14

    未來的AI 深挖谷歌 DeepMind 和它背后的技術

    的想法,明智的做法是查詢最佳的音高板,創(chuàng)建一個高度專業(yè)且有效的演示文稿。通用學習算法DeepMind在通用學習算法方面非常有趣,它不僅可以改善這一領域,還將幫助人們更好地理解人類大腦。 該公司已經(jīng)開始
    發(fā)表于 08-26 12:04

    算法的原理是什么?基數(shù)排序是如何實現(xiàn)的?

    算法的原理是什么?基數(shù)排序是如何實現(xiàn)的?有哪幾種方法可以實現(xiàn)基數(shù)排序?
    發(fā)表于 07-05 07:42

    基于Hadoop的幾種排序算法研究

    如何高效排序是在對大數(shù)據(jù)進行快速有效的分析與處理時的一個重要問題。首先對基于Hadoop平臺的幾種高效的排序算法(Quicksort,Heapsort和Mergesort算法)進行了研
    發(fā)表于 11-08 17:25 ?15次下載
    基于Hadoop的幾種<b class='flag-5'>排序</b><b class='flag-5'>算法</b>研究

    C語言教程之幾種排序算法

    數(shù)據(jù)結構的排序算法有很多種。 其中, 快速排序 、希爾排序、堆排序、直接選擇排序不是穩(wěn)定的
    發(fā)表于 11-16 10:23 ?1780次閱讀

    基于排序學習的推薦算法

    排序學習技術嘗試用機器學習的方法解決排序問題,已被深入研究并廣泛應用于不同的領域,如信息檢索、文本挖掘、個性化推薦、生物醫(yī)學等.將排序學習融入推薦算法中,研究如何整合大量用戶和物品的特
    發(fā)表于 01-16 15:50 ?0次下載
    基于<b class='flag-5'>排序</b>學習的推薦<b class='flag-5'>算法</b>

    常用的排序算法總覽

    我們通常所說的排序算法往往指的是內(nèi)部排序算法,即數(shù)據(jù)記錄在內(nèi)存中進行排序。
    的頭像 發(fā)表于 06-13 18:18 ?2890次閱讀
    常用的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>總覽

    常用的非比較排序算法:計數(shù)排序,基數(shù)排序,桶排序的詳細資料概述

    這篇文章中我們來探討一下常用的非比較排序算法:計數(shù)排序,基數(shù)排序,桶排序。在一定條件下,它們的時間復雜度可以達到O(n)。
    的頭像 發(fā)表于 06-18 15:11 ?7218次閱讀
    常用的非比較<b class='flag-5'>排序</b><b class='flag-5'>算法</b>:計數(shù)<b class='flag-5'>排序</b>,基數(shù)<b class='flag-5'>排序</b>,桶<b class='flag-5'>排序</b>的詳細資料概述

    實用的排序算法 - 交換排序

    實用的排序算法 - 交換排序
    的頭像 發(fā)表于 03-20 09:53 ?1784次閱讀
    實用的<b class='flag-5'>排序</b><b class='flag-5'>算法</b> -  交換<b class='flag-5'>排序</b>

    排序算法分享:歸并排序說明

    我們今天繼續(xù)給大家分享排序算法里面的另外一種排序算法:歸并排序!
    的頭像 發(fā)表于 12-24 14:34 ?807次閱讀

    淺談希爾排序算法思想以及如何實現(xiàn)

    01 希爾排序算法思想 希爾排序也是一種插入排序,是簡單插入排序改進后的一個更高效版本,同時也是首批突破O(n^2)
    的頭像 發(fā)表于 06-30 10:05 ?2073次閱讀

    常見排序算法分類

    本文將通過動態(tài)演示+代碼的形式系統(tǒng)地總結十大經(jīng)典排序算法排序算法 算法分類 —— 十種常見排序
    的頭像 發(fā)表于 06-22 14:49 ?987次閱讀
    常見<b class='flag-5'>排序</b><b class='flag-5'>算法</b>分類

    利用強化學習來探索更優(yōu)排序算法的AI系統(tǒng)

    前言 DeepMind 最近在 Nature 發(fā)表了一篇論文 AlphaDev[2, 3],一個利用強化學習來探索更優(yōu)排序算法的AI系統(tǒng)。 AlphaDev 系統(tǒng)直接從 CPU 匯編指令的層面入手去
    的頭像 發(fā)表于 06-19 10:49 ?702次閱讀
    利用強化學習來探索更優(yōu)<b class='flag-5'>排序</b><b class='flag-5'>算法</b>的AI系統(tǒng)