Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Look ma' I know my algorithms!
Search
Lucia Escanellas
October 24, 2014
Programming
500
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Look ma' I know my algorithms!
RubyConf Argentina 2014
Lucia Escanellas
October 24, 2014
Other Decks in Programming
See All in Programming
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
120
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
570
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
410
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
210
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
600
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
730
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
My Marp Sample
sinoue0108
0
110
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
2
990
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
160
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
130
Dockerfile CMD for Node.js
grazie1999
0
120
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
280
Statistics for Hackers
jakevdp
799
230k
Facilitating Awesome Meetings
lara
57
7.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Exploring anti-patterns in Rails
aemeredith
3
470
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
490
Between Models and Reality
mayunak
4
400
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
480
Transcript
Look ma’, I know my algorithms!
Lucia Escanellas raviolicode
Attributions https://flic.kr/p/6DDvQP https://flic.kr/p/qv5Zp https://flic.kr/p/6SaZsP https://flic.kr/p/edauSN https://flic.kr/p/4uNfK8 https://flic.kr/p/o9ggdk https://flic.kr/p/6kfuHz https://flic.kr/p/5kBtbS
Speed Speed
Zen Elegance Elegance
Toolbox
Theory Theory
This example Not so common
FROM >30HS TO 18 S
WHY USE ORDERS? ALGORITHMS ARE POWERFUL AVOID TRAPS IN RUBY
WHY USE ORDERS? ALGORITHMS ARE POWERFUL AVOID TRAPS IN RUBY
WHY USING ORDERS? ALGORITHMS ARE POWERFUL AVOID TRAPS IN RUBY
Let’s have a look at the PROBLEM
Ordered array How many pairs (a,b) where a ≠ b
-100 <= a + b <= 100
Array: [-100, 1, 100]
Array: [-100, 1, 100] (-100, 1), (-100, 100), (1, 100)
Array: [-100, 1, 100] (-100, 1), (-100, 100), (1, 100)
-100 + 1 = 99 YES
Array: [-100, 1, 100] (-100, 1), (-100, 100), (1, 100)
-100 + 100 = 0 YES
Array: [-100, 1, 100] (-100, 1), (-100, 100), (1, 100)
1 + 100 = 101 NO
Array: [-100, 1, 100] (-100, 1), (-100, 100), (1, 100)
Result: 2
First solution Combinations of 2 elements Filter by: -100 <=
a + b <= 100
def count! combinations = @numbers.combination(2).to_a! ! combinations! .map{ |a,b| a
+ b }! .select do |sum|! sum.abs <= THRESHOLD! end.size! end
10K takes 10s BUT 100M takes 30hs
Time to buy a NEW LAPTOP!
Big O notation How WELL an algorithm SCALES as the
DATA involved INCREASES
Calc Array size (length=N) Count elements one by one: O(N)
Calc Array size (length=N) Count elements one by one: O(N)
Length stored in variable: O(1)
Graphical Math Properties Order Mathematical Properties
Remember: f < g => O(f + g) = O(g)
O(K . f) = O(f) O(1) < O(ln N) < O(N) < O(N2) < O(eN)
Ex: Binary Search Find 7 in [1, 2, 3, 4,
5, 6, 7, 8] 1. element in the middle is 5 2. 5 == 7 ? NO 3. 5 < 7 ? YES => Find 7 in [6, 7, 8] Step 1
! Find 7 in [0, 1, 2, 3, 4, 5,
6, 7, 8] 1. element in the middle is 7 2. 7 == 7 ? YES! FOUND IT!! Step 2
Ex: Binary Search Worst case: ceil ( Log2 N )
23 = 8 ONLY 3 steps
Typical examples Access to a Hash O(1) Binary search O(log
N) Sequential search O(N) Traverse a matrix NxN O(N2)
DON’T JUST BELIEVE ME fooplot.com
BUT raviolicode, I’m getting BORED
I WANT CONCURRENCY I WANT CONCURRENCY
wait… was it Concurrency? or Parallelism?
None
None
None
None
None
None
GIL+CPU-bound NO I/O OPERATIONS concurrency = OVERHEAD
NOT what I was expecting
Parallelism... Parallelism
None
What do we REALLY get? O(N2 / cores) = O(N
2 ) jRubyGo Scala
NO Spoilers O(N2) O(N.log(N)) O(N)
THINKING algorithms is as IMPORTANT as ANY OTHER technique
BYE.
Wait! It's still slow. Wait! It’s still SLOW
Given [1,2,3,4,5] Take 1, then print [5,4,3,2] Take 2, then
print [5,4,3] and so on…
What’s the ORDER of this code? @nums.each_with_index do |a,i|! !
puts @nums.slice(i+1,N).reverse! .inspect! end
What’s the ORDER of this code? @nums.each_with_index do |a,i|! !
puts @nums.slice(i+1,N).reverse! .inspect! end Looks like O(N)
What’s the ORDER of this code? @nums.each_with_index do |a,i|! !
puts @nums.slice(i+1,N).reverse! .inspect! end Behaves like O(N2)
Let’s Look at the DOCS Ruby-Doc.org ! #reverse
O(N) hidden! O(N)!
What’s the ORDER of this code? @nums.each_with_index do |a,i|! !
puts @nums.slice(i+1,N).reverse! .inspect! end O(N2)!
Leaky abstractions LEAKY ABSTRACTIONS
All Non-trivial abstractions are LEAKY to some degree
ABSTRACTIONS DO NOT really SIMPLIFY as they were meant to
Knowing THE ALGORITHMS Behind everyday methods PAYS OFF
Thanks :) Thanks :)