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
7
480
Look ma' I know my algorithms!
RubyConf Argentina 2014
Lucia Escanellas
October 24, 2014
Tweet
Share
Other Decks in Programming
See All in Programming
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
2.7k
Geminiの機能を調べ尽くしてみた
naruyoshimi
0
170
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
430
kintone + ローカルLLM = ?
akit37
0
120
NOT A HOTEL - 建築や人と融合し、自由を創り出すソフトウェア
not_a_hokuts
2
460
Go1.26 go fixをプロダクトに適用して困ったこと
kurakura0916
0
300
株式会社 Sun terras カンパニーデック
sunterras
0
1.9k
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
320
AI活用のコスパを最大化する方法
ochtum
0
110
CSC307 Lecture 12
javiergs
PRO
0
450
個人開発は儲からない - それでも開発開始1ヶ月で300万円売り上げた方法
taishiyade
0
110
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
3
300
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Tell your own story through comics
letsgokoyo
1
820
Building AI with AI
inesmontani
PRO
1
740
Claude Code のすすめ
schroneko
67
210k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.3k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
460
Faster Mobile Websites
deanohume
310
31k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Paper Plane
katiecoart
PRO
0
47k
Accessibility Awareness
sabderemane
0
68
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
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 :)