section h1 Why understanding of basic math is imporant for computer programing p September 21, 2018, rev2 a(href="https://twitter.com/mitjafelicijan") @mitjafelicijan section.center q We Cannot Solve Our Problems With The Same Thinking We Used When We Created Them. footer — Albert Einstein section h2 How we usually find solutions and why this is problematic? ul li We search for code example instead of algorithms. li We copy and paste and do testing on trial&error principle. li We don't take enough time to properly understand problem we a re trying to solve. li Brute force solutions we make are usually not optimized section h2 Levenshtein distance p The Levenshtein distance is a string metric for measuring difference between two sequences. Informally, the Levenshtein distance between two words is the minimum number of single-character edits (i.e. insertions, deletions or substitutions) required to change one word into the other. hr div.center img(src="levenshtein-distance.svg") hr pre code.language-python | def levenshtein(seq1, seq2): | oneago = None | thisrow = range(1, len(seq2) + 1) + [0] | for x in xrange(len(seq1)): | twoago, oneago, thisrow = oneago, thisrow, [0] * len(seq2) + [x + 1] | for y in xrange(len(seq2)): | delcost = oneago[y] + 1 | addcost = thisrow[y - 1] + 1 | subcost = oneago[y - 1] + (seq1[x] != seq2[y]) | thisrow[y] = min(delcost, addcost, subcost) | return thisrow[len(seq2) - 1] hr h4 Going further ol li https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance li https://en.wikipedia.org/wiki/Levenshtein_distance li https://rosettacode.org/wiki/Levenshtein_distance section h2 Basic linear algebra pre code.language-css | body { | background: black; | } pre code.language-javascript | $(document).ready(function() { | $('pre code').each(function(i, block) { | hljs.highlightBlock(block); | }); | }); hr figcaption.right Step 1: Finding nearest point div.center img(src="drawing1.svg") hr figcaption.right Step 1: Finding nearest point $$ \large{ \mathbb{R}^2 ∈ \vec{a} \bar{a} } $$ $$ \large{ e^{i\pi} + 1 = 0 } $$ $$ \large{ x = {-b \pm \sqrt{b^2-4ac} \over 2a} } $$ hr figcaption.right Step 2: Finding nearest point pre code.language-python | fruits = ["apple", "banana", "cherry"] | for x in fruits: | if x == "banana": | break | print(x) hr figcaption.right Finding nearest point $$ \large{ \mathbb{R}^2 ∈ \vec{a} \bar{a} } $$ $$ \large{ e^{i\pi} + 1 = 0 } $$ $$ \large{ x = {-b \pm \sqrt{b^2-4ac} \over 2a} } $$ hr figcaption.right Finding nearest point pre code.language-c | #include | int main () { | for( ; ; ) { | printf("This loop will run forever.\n"); | } | return 0; | } hr figcaption.right Finding nearest point pre code.language-python | fruits = ["apple", "banana", "cherry"] | for x in fruits: | if x == "banana": | break | print(x) hr figcaption.right Finding nearest point pre code.language-sql | SELECT `CustomerName`, `City` FROM `Customers`; hr figcaption.right Finding nearest point pre code.language-go | package main | import "fmt" | func main() { | sum := 0 | for i := 0; i < 10; i++ { | sum += i | } | fmt.Println(sum) | } hr figcaption.right Finding nearest point pre code.language-javascript | $(document).ready(function() { | $('pre code').each(function(i, block) { | hljs.highlightBlock(block); | }); | }); hr figcaption.right Finding nearest point pre code.language-css | body { | background: black; | } section h3 Grid example div.grid.col-1-1 div Lipsum div Lipsum div.grid.col-2-1 div Lipsum div Lipsum div.grid.col-1-2 div Lipsum div Lipsum