Have you ever gotten the warning in Pycharm that says:

Comparison with None performed with equality operators

and wondered why?

Well, today we are going to get to the bottom of the mystery once and for all!

Be prepared, this is actually quite a deep question that might cause you to question the meaning of life.

Yes yes yes!

Python is known to have two operators: “is” and “==”, and in many conventional cases they produce the same results. …

In this story, we are going to talk about an interesting problem about finding maximum integers in a list. This problem is deceptive in that the simple solution is really simple, but there are a couple of not so obvious tricks you can apply to it that makes a big improvement on the performance.

The maximum of the sliding window

suppose I am given a list of integers:

`1, 2, 3, 5, 1, 4, 3`

What is the sliding window maximums if my window size is 3?

`[1 2 `*3*]5 1 4 3

1[2 3 *5*]1 4 3

1 2[3…

In this story, we are going to discuss an application of dynamic programming techniques to an optimization algorithm. Through the process of developing an optimal solution, we get to study a variety of programming techniques that leads to better performance (with a surprise at the end!).

The Knapsack problem

This problem is called the knapsack problem, because one would encounter a similar problem when packing items into knapsack, while trying to optimize, say, weight and value of the items packed in.

So, given a list of strings:

`r1 = ['001', '11', '01', '10', '1001']`

and given a container that can…

Signal combinations are important in many fields, it is also important in portfolio construction, let’s find out why.

Not always

Suppose I have a portfolio (1) that returns 1% on even days and 0.5% on odd days:

Whenever people talk about Natural Language Processing(NLP), images of fancy machine learning models and prospects of powerful AI pop up. But nothing starts from nowhere, at the most rudimentary level, NLP is simply a collection of tools for processing textual data to makes them clean and more uniform. Let’s begin!

Clean up the sentence

First, let’s start with the a sentence:

`test001 = "01 Google Gains In Popularity, Soon Surpassing Apple"`

It’s a head line so all words are capitalized and there are punctuations, we need to clean them:

`# remove punctuations`

import string

translator = str.maketrans('', '', string.punctuation)

test002 = test001.translate(translator)

# Output:

#…

As I accumulate more experience in coding and life in general, one of the things among my observations that stood out to me is that, whenever there is a problem to be solved, there usually exists a very intuitive solution to it. Sometimes this solution happens to be efficient, sometimes grossly suboptimal. This is especially noticeable in algorithms, because an algorithm is often times a conceptualization of a real life problem, and through the algorithm the essential elements of the problem is kept, allowing us to tackle the problem directly.

The largest rectangle in a matrix is one such problem…

When I first started learning to use Kalman filter, it seemed very complicated to me, mainly because there were so many inputs to it and you never really knew if you’ve set them correctly. By going through this example, I hope my readers will understand that the motivations and logic behind it is really very pragmatic in nature and not so complicated after all.

So let’s get started with our example.

I am dropping a tennis ball from a helicopter (or maybe my airship), I would like to predict its position in the air until it hits the ground.

Tarjan’s Off-line Lowest Common Ancestor Algorithm is an interesting application of the disjoint set structure for optimizing the performance of determining the lowest common ancestor(LCA) of two nodes within a tree, which also involves concepts such as caching and recursion. In preparation for this story, please refer to my previous story on Lowest Common Ancestor for context.

Ok, let’s get started!

In order to understand this algorithm, we first have to have a good grasp on the concept of disjoint sets…

*Disjoint sets are collections of nodes, where there is no overlap between sets.*

Sounds simple, right? Actually, it is…

It is the lowest level parent shared by two nodes within a tree.

Let’s take a look at an example:

Normal distribution, also called gaussian distribution, is one of the most widely encountered distributions. One of the main reasons is that the normalized sum of independent random variables tends toward a normal distribution, regardless of the distribution of the individual variables (for example you can add a bunch of random samples that only takes on values -1 and 1, yet the sum itself actually becomes normally distributed as the number of sample you have becomes larger). This is known as the central limit theorem. …

Interesting pieces on various topics in finance and technology.