Warm-up Coding Interview: Dynamic Programming

The most challenging algorithmic problems involve optimization, where we seek to find a solution that maximizes or minimizes some function. Algorithms for optimization problems require proof that they always return the best possible solution. Greedy algorithms that make the best local decision at each step are typically efficient by usually do not guarantee global optimality. … Continue reading Warm-up Coding Interview: Dynamic Programming

Warm-up Coding Interview: Combinatorial Search and Heuristic Methods

In this section, we introduce backtracking as a technique for listing all possible solutions for a combinatorial algorithm problem. We illustrate the power of clever pruning techniques to speed up real search applications. For problems that are too large to contemplate using brute-force combinatorial search, we introduce heuristic methods such as simulated annealing. Such heuristic … Continue reading Warm-up Coding Interview: Combinatorial Search and Heuristic Methods

Warm-up Coding Interview: Weighted Graph Algorithms

There is an alternate universe of problems for weighted graphs. The edges of road networks are naturally bound to numerical values such as construction cost, traversal time, length, or speed limit. Identifying the shortest path in such graphs proves more complicated than breadth-first search in unweighted graphs, but opens the door to a wide range of … Continue reading Warm-up Coding Interview: Weighted Graph Algorithms

Paper Daily: StyleGAN

A style-Based Generator Architecture for Generative Adversarial Networks The authors propose an alternative generator architecture for generative adversarial networks, borrowing from style transfer literature. The new architecture leads to an automatically learned, unsupervised separation of high-level attributes, and it enables intuitive, scale-specific control of the synthesis. The new generator improves the state-of-the-art in terms of … Continue reading Paper Daily: StyleGAN

Paper Daily: Rethinking the value of network pruning

In this work, the authors make several surprising observations which contradict common beliefs. Their results have several implications: 1) training a large, over-parameterized model is not necessary to obtain an efficient final model, 2) learned “important” weights of the large model are not necessarily useful for the small pruned model, 3) the pruned architecture itself, … Continue reading Paper Daily: Rethinking the value of network pruning

Optimizing C++: Optimization Patterns

This section gathers together a few general techniques for improving performance that are so useful that they deserve specific mention. The reader may recognize some of these patterns as the core of familiar data structures, C++ language features, or hardware innovations: Precomputation — Remove computation from the hot part of the program by performing it … Continue reading Optimizing C++: Optimization Patterns

Apache Thrift architecture

The Apache Thrift Framework can be organized into five layers: 12345* The RPC Server Library * RPC Service Stubs * User-Defined Type Serialization * The Serialization Protocol Library * The Transport Library Applications requiring a common way to serialize data structures for storage or messaging may need nothing more than the bottom three layers of … Continue reading Apache Thrift architecture

Microservice Patterns – Escaping Monolithic Hell

Scale cube and micro-services The model defines three ways to scale an application: X, Y, and Z.  X-axis scaling X-axis scaling is a commonly to scale an application. You simple run multiple instances of the application behind a load balancer.  The load balancer distributes requests amongst the N identical instances of the application. … Continue reading Microservice Patterns – Escaping Monolithic Hell