SlideShare uma empresa Scribd logo
1 de 7
Baixar para ler offline
Arrays.sort()より速い
       ソートを作ってみた。


株式会社サイバーエージェント
アメーバ事業本部 Ameba Technology Laboratory
服部 司
株式会社サイバーエージェント
                                           2



何に使うの?

・ 推薦結果のソート
  - 10ms で2000万人分ソートすると 56時間も


・ 集合演算
  - intersection, not …
  (sort済配列に対して比較操作を行って実現 )
株式会社サイバーエージェント
                                                                    3



JavaのArrays.sort() のアルゴリズムは?

・ 修正クイックソート(Java7). いわゆるTimSort
   - 配列の長さ、ほぼsort済かどうか?
     等の条件でソートアルゴリズムを変更。
     場合分けが激しい。

   - 性能は多分 O(n log n)

   - アルゴリズムの詳細は
       http://research.preferred.jp/2011/10/tim-sort/
株式会社サイバーエージェント
                                                4



 どうやって早くするの?
・ Radix Sort (基数ソート)
   - 性能 O( kn )   k : ブロック数
   - 比較前提のソートの理論限界 O(n log n)
     を超えている
    - 安定ソート ( MergeSortと同じ )
    - 浮動小数・負の数もbit演算で工夫すれば
      ソート可能
    - 複合キーのソートは苦手
株式会社サイバーエージェント
                                                                                            5



                 実際に試してみた。                               * randomな配列をソート
sort time (ms)




                                        sort time (ms)

                   array length                             array length

                                  Radix Sort 速い。
株式会社サイバーエージェント
                                                                6



まとめ・補足
・ Radix Sort (基数ソート)
   - Arrays.sort より 圧倒的に速い
   - ほぼsort済配列のソートは Arrays.sortの方が速い
     (それに対応したヒューリスティックが書いてあるので)

   - comparator が使えないので、やや使い辛いが、
     使えるシーンは豊富にある。

・ 参考文献
   - http://codercorner.com/RadixSortRevisited.htm
   - http://stereopsis.com/radix.html
株式会社サイバーエージェント
                               7




ご清聴ありがとうございました!

Mais conteúdo relacionado

Mais de JAVA DM

Matrix Factorizationを使った評価予測
Matrix Factorizationを使った評価予測Matrix Factorizationを使った評価予測
Matrix Factorizationを使った評価予測JAVA DM
 
MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出JAVA DM
 
芸能人推薦のしくみ
芸能人推薦のしくみ芸能人推薦のしくみ
芸能人推薦のしくみJAVA DM
 
20100930sig startups learn
20100930sig startups learn20100930sig startups learn
20100930sig startups learnJAVA DM
 
お披露目会05/2010
お披露目会05/2010お披露目会05/2010
お披露目会05/2010JAVA DM
 
双対定理
双対定理双対定理
双対定理JAVA DM
 
整数列圧縮
整数列圧縮整数列圧縮
整数列圧縮JAVA DM
 
NewPFD PForDelta
NewPFD PForDeltaNewPFD PForDelta
NewPFD PForDeltaJAVA DM
 
NaiveBayes+DAEM
NaiveBayes+DAEMNaiveBayes+DAEM
NaiveBayes+DAEMJAVA DM
 
lsh p-stable
lsh p-stablelsh p-stable
lsh p-stableJAVA DM
 

Mais de JAVA DM (10)

Matrix Factorizationを使った評価予測
Matrix Factorizationを使った評価予測Matrix Factorizationを使った評価予測
Matrix Factorizationを使った評価予測
 
MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出MP Joinを使った類似データ抽出
MP Joinを使った類似データ抽出
 
芸能人推薦のしくみ
芸能人推薦のしくみ芸能人推薦のしくみ
芸能人推薦のしくみ
 
20100930sig startups learn
20100930sig startups learn20100930sig startups learn
20100930sig startups learn
 
お披露目会05/2010
お披露目会05/2010お披露目会05/2010
お披露目会05/2010
 
双対定理
双対定理双対定理
双対定理
 
整数列圧縮
整数列圧縮整数列圧縮
整数列圧縮
 
NewPFD PForDelta
NewPFD PForDeltaNewPFD PForDelta
NewPFD PForDelta
 
NaiveBayes+DAEM
NaiveBayes+DAEMNaiveBayes+DAEM
NaiveBayes+DAEM
 
lsh p-stable
lsh p-stablelsh p-stable
lsh p-stable
 

Último

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Último (8)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

RadixSort@第3回caグループ勉強会

  • 1. Arrays.sort()より速い ソートを作ってみた。 株式会社サイバーエージェント アメーバ事業本部 Ameba Technology Laboratory 服部 司
  • 2. 株式会社サイバーエージェント 2 何に使うの? ・ 推薦結果のソート - 10ms で2000万人分ソートすると 56時間も ・ 集合演算 - intersection, not … (sort済配列に対して比較操作を行って実現 )
  • 3. 株式会社サイバーエージェント 3 JavaのArrays.sort() のアルゴリズムは? ・ 修正クイックソート(Java7). いわゆるTimSort - 配列の長さ、ほぼsort済かどうか? 等の条件でソートアルゴリズムを変更。 場合分けが激しい。 - 性能は多分 O(n log n) - アルゴリズムの詳細は http://research.preferred.jp/2011/10/tim-sort/
  • 4. 株式会社サイバーエージェント 4 どうやって早くするの? ・ Radix Sort (基数ソート) - 性能 O( kn ) k : ブロック数 - 比較前提のソートの理論限界 O(n log n) を超えている - 安定ソート ( MergeSortと同じ ) - 浮動小数・負の数もbit演算で工夫すれば ソート可能 - 複合キーのソートは苦手
  • 5. 株式会社サイバーエージェント 5 実際に試してみた。 * randomな配列をソート sort time (ms) sort time (ms) array length array length Radix Sort 速い。
  • 6. 株式会社サイバーエージェント 6 まとめ・補足 ・ Radix Sort (基数ソート) - Arrays.sort より 圧倒的に速い - ほぼsort済配列のソートは Arrays.sortの方が速い (それに対応したヒューリスティックが書いてあるので) - comparator が使えないので、やや使い辛いが、 使えるシーンは豊富にある。 ・ 参考文献 - http://codercorner.com/RadixSortRevisited.htm - http://stereopsis.com/radix.html
  • 7. 株式会社サイバーエージェント 7 ご清聴ありがとうございました!