Competitive Programmer’s Handbook
The purpose of this book is to give you a thorough introduction to competitive programming. It is assumed that you already know the basics of programming, but no previous background in competitive programming is needed.
The book is especially intended for students who want to learn algorithms
and possibly participate in the International Olympiad in Informatics (IOI) or in the International Collegiate Programming Contest (ICPC). Of course, the book is also suitable for anybody else interested in competitive programming. It takes a long time to become a good competitive programmer, but it is also an opportunity to learn a lot. You can be sure that you will get a good general understanding of algorithms if you spend time reading the book, solving problems and taking part in contests.
The book is under continuous development. You can always send feedback on the book to ahslaaks@cs.helsinki.fi.
Thinking in C++
Like any human language, C++ provides a way to
express concepts. If successful, this medium of
expression will be significantly easier and more flexible
than the alternatives as problems grow larger and more
complex.
Thinking in Java Fourth Edition
Programming is about managing complexity: the complexity of the problem you want to solve, laid upon the complexity of the machine in which it is solved. Because of this complexity, most of our programming projects fail. And yet, of all the programming languages of which I am aware, almost none have gone all out and decided that their main design goal would be to conquer the complexity of developing and maintaining programs.1 Of course, many language design decisions were made with complexity in mind, but at some point there were always other issues that were considered essential to be added into the mix. Inevitably, those other issues are what cause programmers to eventually “hit the wall” with that language. For example, C++ had to be backwards-compatible with C (to allow easy migration for C programmers), as well as efficient. Those are both very useful goals and account for much of the success of C++, but they also expose extra complexity that prevents some projects from being finished (certainly, you can blame programmers and management, but if a language can help by catching your mistakes, why shouldn’t it?). As another example, Visual BASIC (VB) was tied to BASIC, which wasn’t really designed to be an extensible language, so all the extensions piled upon VB have produced some truly unmaintainable syntax. Perl is backwards-compatible with awk, sed, grep, and other Unix tools it was meant to replace, and as a result it is often accused of producing “write-only code” (that is, after a while you can’t read it). On the other hand, C++, VB, Perl, and other languages like Smalltalk had some of their design efforts focused on the issue of complexity and as a result are remarkably successful in solving certain types of problems.
The C programming Language
The computing world has undergone a revolution since the publication of The C Programming Language in 1978. Big
computers are much bigger, and personal computers have capabilities that rival mainframes of a decade ago. During this
time, C has changed too, although only modestly, and it has spread far beyond its origins as the language of the UNIX
operating system.
Algorithms in Java
The objective of this book is to study a broad variety of important and useful algorithmsmethods for solving problems that are suited for computer implementation. We shall deal with many different areas of application, always concentrating on fundamental algorithms that are important to know and in
Advanced Programming in the UNIX Environment
All operating systems provide services for programs they run. Typical services include executing a new program, opening a file, reading a file, allocating a region of memory, getting the current time of day, and so on. The focus of this text is to describe the services provided by various versions of the UNIX operating system.
Describing the UNIX System in a strictly linear fashion, without any forward references to terms that haven't been described yet, is nearly impossible (and would probably be boring). This chapter provides a whirlwind tour of the UNIX System from a programmer's perspective. We'll give some brief descriptions and examples of terms and concepts that appear throughout the text. We describe these features in much more detail in later chapters. This chapter also provides an introduction and overview of the services provided by the UNIX System, for programmers new to this environment.
Linux Programming Bible
The secret is out—there’s something special about Linux. The operating system that began life as a way for then-student Linus
Torvalds to do his homework has evolved into a powerful force in the marketplace, literally earning money overnight.
What is so special about Linux? And why should you, a programmer, care? You’ll find the answers in the pages of this book.
Linux is more than just a new operating system. It represents the very best of what developers all over the world over like to see.
Its rich multitasking capabilities and powerful communication features enable you to write powerful and fast applications quickly.
Linux supports literally dozens of languages, including C, C++, Perl, Java, LISP, Prolog, Scheme, Pascal, BASIC, two shell
flavors, assembler, Ada, Smalltalk, and FORTRAN. The program-ming environment in Linux is first-rate; many tools have had a
chance to be refined since before Linux even existed, thanks to its UNIX heritage.
As Linux is a fairly new system, I discovered that there is a lack of information for the Linux programmer. That is where this book
comes in. By reading this book, you not only get to learn what Linux is doing under the hood, but also how to take advantage of
that knowledge in your own applications. Most of the extensive code examples in this book are complete programs, ready to run,
and some of which are also available online.
Foundations of statistical natural language processing
THE NEED for a thorough textbook for Statistical Natural Language Processing
hardly needs to be argued for in the age of on-line information,
electronic communication and the World Wide Web. Increasingly, businesses,
government agencies and individuals are confronted with large
amounts of text that are critical for working and living, but not well
enough understood to get the enormous value out of them that they potentially
hide.