SlideShare a Scribd company logo
1 of 57
LAZYSELECT
 09M6358
n


    Q
    p
3   5   2   7   1   6   4   8
n=8

3   5   2   7   1   6   4   8
n=8

3   5   2   7   1   6   4   8
n=8

3   5   2   7   1   6   4   8
n=8

3   Q.
    5
         A(n = 8)
        2 7 1
         p=5        A. 5
                    6   4   8
QUICKSELECT : O(n)
     SELECT : O(n)
LAZYSELECT
LAZYSELECT
   O(n)
1.         A        n               (
     n < 50),
       A        ,       p
           .                A       n3/4
                        ,       B          .
A
n
n

    n = 500
n 3/4



        n = 500
n 3/4



        n = 500
n 3/4



        n = 500




        n = 106
B

n = 106
n

    n = 50
p
p



p
2. A        p       B
  q=pn3/4/n=pn-1/4          .        , l=max{ q-
  √n     , 0}, h=min{ q+√n      ,n3/4}   (         ,
  q    √n                            )       ,B    l
        L       h       H        (                 B
       LAZYSELECT                             .)
B

n = 106
B

p       q
q=   pn3/4 /   n
q=   pn-1/4
q=   pn-1/4
q
q
-√n       +√n
      q
-√n       +√n
      q


 L        H
l = max{ q - √n   , 0}

h = min{ q + √n   ,   n3/4 }
B   l   L

B   h   H
LAZYSELECT


 B       l         L

B       h          H
LAZYSELECT
3.      A             , A A[i]<H                                 A1
                           A2       (QUICKSORT partition
     ). A1                |A1| p                    , A2          p-|A1|
                    (A2       LAZYSELECT                   ).         |A1|≧p
             , A1    A[i]<L                         A11
                    A12              . |A11|≧p                  A11     p
                    (A11      LAZYSELECT                    ).
     , A12          p-|A11|                  (A12   LAZYSELECT
             ).
A
A


    H
A1       A2

     H
A1       A2
     ?
     P
A1         A2

|A1|   P
A2

P’ = P - |A1|
A2

P’ = P - |A1|
A1                A2

     P   ≦ |A1|
A1   A2

 L
A11 A12   A2

   L
A11 A12   A2
  ?
  P
A1
A11 A12                                   A2
LAZYSELECT        LAZYSELECT            LAZYSELECT
             or                    or

  p’ = p          p’ = p - |A11|        p’ = p - |A1|
n3/4 √n
A11         A2


      A12
p
A11         A2


      A12
O(n)
Lazyselect
Lazyselect

More Related Content

More from Tomohiro Nishimura

It's Mechanize for it. Ruby as a Finder.
It's Mechanize for it. Ruby as a Finder.It's Mechanize for it. Ruby as a Finder.
It's Mechanize for it. Ruby as a Finder.
Tomohiro Nishimura
 
Haml/Sassを使って履歴書を書くためのn個の方法
Haml/Sassを使って履歴書を書くためのn個の方法Haml/Sassを使って履歴書を書くためのn個の方法
Haml/Sassを使って履歴書を書くためのn個の方法
Tomohiro Nishimura
 
RubyKaigi2009さんか報告会
RubyKaigi2009さんか報告会RubyKaigi2009さんか報告会
RubyKaigi2009さんか報告会
Tomohiro Nishimura
 

More from Tomohiro Nishimura (19)

Kyotorb#3
Kyotorb#3Kyotorb#3
Kyotorb#3
 
Kyotorb Meetup #2
Kyotorb Meetup #2Kyotorb Meetup #2
Kyotorb Meetup #2
 
Kyoto.rb
Kyoto.rbKyoto.rb
Kyoto.rb
 
KPTのすすめ
KPTのすすめKPTのすすめ
KPTのすすめ
 
2010年ふりかえる
2010年ふりかえる2010年ふりかえる
2010年ふりかえる
 
Rubyist のための HTML5 入門 -Content Models-
Rubyist のための HTML5 入門 -Content Models-Rubyist のための HTML5 入門 -Content Models-
Rubyist のための HTML5 入門 -Content Models-
 
Boys, do LiveCoding
Boys, do LiveCodingBoys, do LiveCoding
Boys, do LiveCoding
 
Vim Text Object
Vim Text ObjectVim Text Object
Vim Text Object
 
Introduce the LiveCoding
Introduce the LiveCodingIntroduce the LiveCoding
Introduce the LiveCoding
 
2009年ふりかえり
2009年ふりかえり2009年ふりかえり
2009年ふりかえり
 
It's Mechanize for it. Ruby as a Finder.
It's Mechanize for it. Ruby as a Finder.It's Mechanize for it. Ruby as a Finder.
It's Mechanize for it. Ruby as a Finder.
 
Introduce the Hacobu
Introduce the HacobuIntroduce the Hacobu
Introduce the Hacobu
 
Rubyで始めるGTD
Rubyで始めるGTDRubyで始めるGTD
Rubyで始めるGTD
 
Introduce RSpec's Matchers
Introduce RSpec's MatchersIntroduce RSpec's Matchers
Introduce RSpec's Matchers
 
Termtter Refactoring Spa
Termtter Refactoring SpaTermtter Refactoring Spa
Termtter Refactoring Spa
 
Haml/Sassを使って履歴書を書くためのn個の方法
Haml/Sassを使って履歴書を書くためのn個の方法Haml/Sassを使って履歴書を書くためのn個の方法
Haml/Sassを使って履歴書を書くためのn個の方法
 
RubyKaigi2009さんか報告会
RubyKaigi2009さんか報告会RubyKaigi2009さんか報告会
RubyKaigi2009さんか報告会
 
Sinatra事始め
Sinatra事始めSinatra事始め
Sinatra事始め
 
今更はじめるCucumber
今更はじめるCucumber今更はじめるCucumber
今更はじめるCucumber
 

Lazyselect