News for hackers. Stuff that matters.
Re:Big-O notation explained by a self-taught programmer by R_haterade on Saturday October 29, 2016 @11:54AM (#12824477)
Sometimes. Sometimes you just need to throw things in the oven until the first one browns up.

I recently had a problem where I needed an adjacency matrix of shortest paths. It was a choice between dijkstra and floyd-warshall. My dijkstra implementation kicked the pants off of floyd warshall for this application by an order of magnitude, which you wouldn't really expect. And the big-O complexity was the same for both algorithms, it's just that for the graph structure, the operation count for dijkstra was much lower. It was the first one to brown up.

Re:Big-O notation explained by a self-taught programmer by gk101 on Saturday October 29, 2016 @12:45PM (#12824785)
A few comments just in case this a critical part of your program, and if running it faster would help:

1. Using a heap with Dijkstra's algorithm would speed up your program

From your comment I am guessing you are using Dijkstra's algorithm without a heap, which gives O(n * m) for one source, and O(n^2 * m) for all sources (all pairs shortest path), where n is the number of nodes/vertices, and m is the number of edges

You would be able to improve that to O(m * n * lgn) by using a heap, which improves the time to run it by quite a lot in practice

2. The time it takes to run the program also depends on the density of your matrix:

In the case where the graph is sparse: m ~ n, and will result in O(n^2 * lgn) (or O(n^3) without a heap)

In the case where the graph is dense: m ~ n^2, and will result in O(n^3 * lgn) (or O(n^4) without a heap)

Compare the numbers above to O(n^3), which is the time complexity of Floyd-Warshall

So just in terms of time complexity, Floyd-Warshall would be faster in a dense graph

Re:Big-O notation explained by a self-taught programmer by R_haterade on Saturday October 29, 2016 @06:21PM (#12826773)
Agreed, but this was for a fast script that will probably run 100 times for analysis purposes--the code itself wasn't the end goal. I just needed something that could crunch my numbers in 10 minutes instead of 2 hours. :-)
Re:Big-O notation explained by a self-taught programmer by R_haterade on Saturday October 29, 2016 @06:26PM (#12826803)
I do want to express that I appreciate the effort you put into this post. Algorithms and data structures are my weakest point right now, and being able to read through your explanation is a helpful thing.
Re:Big-O notation explained by a self-taught programmer by bogomipz on Saturday October 29, 2016 @12:33PM (#12824722)
Yes and its good to know the limits of Big O as you mentioned Big O tells you what an upper bound on something is but it will provide no answer as to which to which of two algorithms with the same upper bound will be faster. There is a field that deals with this and I watched some lectures by Robert Sedgewick called "Analytic Combinatorics" where he talks about a different analysis to do just that. He talks about being able to tell large institutional clients exactly how long an algorithm on a particular input will take and how important this was in the 1970s when computing power was much slower and far more expensive.
Re:Big-O notation explained by a self-taught programmer by R_haterade on Saturday October 29, 2016 @06:24PM (#12826790)
I will have to check this out as I'm in a lot of places where speed matters these days.

Does he delve into the nuts and bolts of data structure for this, or does it stay more theoretical?

Re:Big-O notation explained by a self-taught programmer by bogomipz on Saturday October 29, 2016 @07:16PM (#12827035)
Its both. Here are some links:

Video Lectures are here: https://www.coursera.org/learn/analysis-of-algorithms

and the book:

http://aofa.cs.princeton.edu/home/

Also a youtube - short history of algorithm analysis by Sedgewick is worth a watch:

https://www.youtube.com/watch?v=qap2MyBTSZk