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
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
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
In this paper, the authors proposed a long-term feature bank – supportive information extracted over the entire span of a video – to augment state-of-the-art video models that otherwise would only view short clips of 2-5 seconds.
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
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
Changing a data structure in a slow program can work the same way an organ transplant does in a sick patent. Important classes of abstract data types such as containers, dictionaries, and priority queues, have many different but functionally equivalent data structures that implement them.
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
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
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