Module: Quartiles

Defined in:
lib/tlsh/quartiles.rb

Overview

Buckets provides utility computation methods for computation of quartile statistics

Constant Summary collapse

EFF_BUCKETS =
128

Class Method Summary collapse

Class Method Details

.quartile_points(buckets) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/tlsh/quartiles.rb', line 6

def quartile_points(buckets)
  spl = spr = 0
  q1 = 0

  p1 = EFF_BUCKETS / 4 - 1
  p2 = EFF_BUCKETS / 2 - 1
  p_end = EFF_BUCKETS - 1

  buckets_cpy = buckets.dup[0..EFF_BUCKETS]

  cut_left = []
  cut_right = []

  l = 0
  r = p_end
  loop do
    ret = partition(buckets_cpy, l, r)
    if ret > p2
      r = ret - 1
      cut_right[spr] = ret
      spr += 1
    elsif ret < p2
      l = ret + 1
      cut_left[spl] = ret
      spl += 1
    else
      q1 = buckets_cpy[p2]
      break
    end
  end

  cut_left[spl] = p2 - 1
  cut_right[spr] = p2 + 1

  q2 = get_q2(buckets_cpy, cut_left, spl, p1)
  q3 = get_q3(buckets_cpy, cut_right, spr, p_end)

  [q1, q2, q3]
end