Incredible as it may seem, the end of March marks 20 years since the release of the first film in the Matrix franchise
directed by the Wachowski siblings. This “cyberpunk” sci-fi movie was a
box office hit with its dystopian futuristic vision, distinctive
fashion sense, and slick, innovative action sequences. But it was also a
catalyst for popular discussion around some very big philosophical
The film centers on a computer
hacker, “Neo” (played by Keanu Reeves), who learns that his whole life
has been lived within an elaborate, simulated reality. This
computer-generated dream world was designed by an artificial
intelligence of human creation, which industrially farms human bodies
for energy while distracting them via a relatively pleasant parallel
reality called the “matrix.”
Pair Trading – Trade two stocks which naturally track each other an example could be Coke and Pepsi, make money when they fall out of line on the idea that they will have to revert back to tracking each other. This is a common mean revision strategy used by hedge funds and might not exactly fit high-frequency trading however it still fall under algorithmic trading.
It was March 27, 2014, and Satya Nadella was about to make his first public appearance as CEO of Microsoft. The tone, he knew, would be important.
Nadella’s predecessor, Steve Ballmer, was famous for making public appearances feel epic.
At a 1991 meeting in Japan, he seemed to injure his vocal chords
because he was screaming “Windows” with such force. In 2000, when
Microsoft celebrated its 25th anniversary, Ballmer reportedly
popped out of a giant cake. And in 2013, when he announced he was
stepping down, he bid farewell to 13,000 Microsoft employees as “(I’ve
had) The Time of My Life” blared through the speakers of Key Arena in
Seattle. Through tears, the 6’5” Ballmer shouted, “Soak it in all of
you. You work for the greatest company in the world.”
George RR Martin’s platform switch reminds us of an early blogging giant greatly changed.
Last April, famed writer and hero-murderer George R.R. Martin announced that he was hoisting his ancient blog from his moldering LiveJournal onto his personal website. For casual Game of Thrones fans, it was a minor hiccup at best—most clicked the new link and never looked back. For a certain strata of enthusiasts, however, this was a far more momentous move. Described as “the last holdout” by longtime LiveJournal volunteer-turned-employee Janine Costanzo, Martin’s blog was perhaps the once-blogging-giant’s last bond to the world of great pop culture. So while the author may never finish his most beloved literary series, his simple act of Web hosting logistics truly marks the end of an era.
Your intuition behind why the algorithm should be Θ(n2) is
a good one, but most suffix trees are designed in a way that eliminates
the need for this time complexity. Intuitively, it would seem that you
need Θ(n2) different nodes to hold all of the different
suffixes, because you’d need n + (n – 1) + … + 1 different nodes.
However, suffix trees are typically designed so that there isn’t a
single node per character in the suffix. Instead, each edge is
typically labeled with a sequence of characters that are substrings of
the original string. It still may seem that you’d need Θ(n2)
time to construct this tree because you’d have to copy the substrings
over to these edges, but typically this is avoided by a cute trick –
since all the edges are labeled with strings that are substrings of the
input, the edges can instead be labeled with a start and end position,
meaning that an edge spanning Θ(n) characters can be constructed in O(1)
time and using O(1) space.
That said, constructing suffix trees is still really hard to do. The
Θ(n) algorithms referenced in Wikipedia aren’t easy. One of the first
algorithms found to work in linear time is Ukkonen’s Algorithm, which is commonly described in textbooks on string algorithms (such as Algorithms on Strings, Trees, and Sequences). The original paper is linked in Wikipedia. More modern approaches work by first building a suffix array and using that to then construct the suffix tree.