OpenSource For You

Over the last couple of months, this column has covered dynamic languages such as Javascript, and how they differ from traditiona­l statically compiled languages like C or C++. Since many readers have requested a discussion on programmin­g interview questio

-

Let’s first list this month’s interview questions: 1. You have been asked to design a price comparison website for online gold jewellery sellers. One of the ways of getting the data from online stores is to crawl their websites and get their product price lists. Hence, you need to design a code snippet that, given a URL, will crawl all URLs reachable from the page at that URL, and store the page contents of each URL as separate files in a directory. Write a C code snippet to do this. ( Clue: Try to consider this a graph traversal problem.) 2. We are all familiar with the spanning trees of a graph. A spanning tree of a graph G(V,E) is a subset of the graph’s edges, such that it forms a tree spanning all vertices of the graph. The Minimum Spanning Tree (MST) of a graph with weighted edges is a spanning tree whose sum of edge weights is the minimum among all the spanning trees possible for a graph. Questions on spanning trees and MSTs are quite popular in software interviews, so do make sure you read up on algorithms to construct MSTs. Kruskal’s algorithm and Prim’s algorithms are popular for constructi­ng MSTs. Both are greedy algorithms, which we have discussed in one of the earlier columns. Here is a variant of the standard MST question: If you are given a weighted graph, how can you find the maximum spanning tree? (The maximum spanning tree is the spanning tree whose sum of edge weights is the maximum.) Is it possible to use a greedy algorithm to

determine the maximum spanning tree? 3. Given a sequence of ‘n’ integers a1, a2, a3, …. an, what is the maximum number of inversions that are possible in any permutatio­n of the sequence? An inversion is a pair of elements that are out of sorted order. For instance, an array of integers sorted in ascending order has zero inversions. Can you write a code snippet to determine the number of inversions, given a permutatio­n of ‘n’ integers? What is the expected time complexity of your algorithm? 4. Many of the popular programmin­g languages like Java, Ruby, Scala, JavaScript, etc, support automatic memory management, which means that dynamicall­y allocated memory can be freed automatica­lly by the language runtime once it is no longer needed. This is popularly known as garbage collection, and a number of complex algorithms have been developed for this purpose. However, C/ C++ requires the programmer to perform explicit memory management by freeing the memory through free/delete calls. What makes it difficult to implement an automatic memory reclamatio­n facility for C? How would you design a garbage collector for C? What language features would you ask your developers to forego if you wanted to design an efficient garbage collector for C? 5. We are all familiar with the concept of adjacency in a graph. Two vertices are said to be adjacent if there is an edge connecting

Newspapers in English

Newspapers from India