This textbook explains the concepts and techniques required to write programs that can handle large amounts of data efficiently. Project-oriented and classroom-tested, the book presents a number of important algorithms supported by examples that bring meaning to the problems faced by computer programmers. The idea of computational complexity is also introduced, demonstrating what can and cannot be computed efficiently so that the programmer can make informed judgements about the algorithms they use. Features: includes both introductory and advanced data structures and algorithms topics, with suggested chapter sequences for those respective courses provided in the preface; provides learning goals, review questions and programming exercises in each chapter, as well as numerous illustrative examples; offers downloadable programs and supplementary files at an associated website, with instructor materials available from the author; presents a primer on Python for those from a different language background.
This book provides the first extensive survey of block ciphers following the Lai-Massey design paradigm. After the introduction, with historical remarks, the author structures the book into a chapter on the description of the PES, IDEA and other related ciphers, followed by a chapter on cryptanalysis of these ciphers, and another chapter on new cipher designs. The appendices include surveys of cryptographic substitution boxes and of MDS codes. This comprehensive treatment can serve as a reference source for researchers, students and practitioners.
This book is the first to present a rich selection of over 30 real-world cases of how leading organizations conduct Business Process Management (BPM). The cases stem from a diverse set of industry sectors and countries on different continents, reporting on best practices and lessons learned. The book showcases how BPM can contribute to both exploitation and exploration in a digital world. All cases are presented using a uniform structure in order to provide valuable insights and essential guidance for students and practitioners.
Build a microservices architecture with Spring Boot, by evolving an application from a small monolith to an event-driven architecture composed of several services. This book follows an incremental approach to teach microservice structure, test-driven development, Eureka, Ribbon, Zuul, and end-to-end tests with Cucumber. Author Moises Macero follows a very pragmatic approach to explain the benefits of using this type of software architecture, instead of keeping you distracted with theoretical concepts. He covers some of the state-of-the-art techniques in computer programming, from a practical point of view. You´ll focus on what´s important, starting with the minimum viable product but keeping the flexibility to evolve it. What You´ll Learn Build microservices with Spring Boot Use event-driven architecture and messaging with RabbitMQ Create RESTful services with Spring Master service discovery with Eureka and load balancing with Ribbon Route requests with Zuul as your API gateway Write end-to-end rests for an event-driven architecture using Cucumber Carry out continuous integration and deployment Who This Book Is For Those with at least some prior experience with Java programming. Some prior exposure to Spring Boot recommended but not required.
O´Reilly´s bestselling book on Linux´s bash shell is at it again. Now that Linux is an established player both as a server and on the desktop Learning the bash Shell has been updated and refreshed to account for all the latest changes. Indeed, this third edition serves as the most valuable guide yet to the bash shell. As any good programmer knows, the first thing users of the Linux operating system come face to face with is the shell the UNIX term for a user interface to the system. In other words, it´s what lets you communicate with the computer via the keyboard and display. Mastering the bash shell might sound fairly simple but it isn´t. In truth, there are many complexities that need careful explanation, which is just what Learning the bash Shell provides. If you are new to shell programming, the book provides an excellent introduction, covering everything from the most basic to the most advanced features. And if you´ve been writing shell scripts for years, it offers a great way to find out what the new shell offers. Learning the bash Shell is also full of practical examples of shell commands and programs that will make everyday use of Linux that much easier. With this book, programmers will learn: - How to install bash as your login shell - The basics of interactive shell use, including UNIX file and directory structures, standard I/O, and background jobs - Command line editing, history substitution, and key bindings - How to customize your shell environment without programming - The nuts and bolts of basic shell programming, flow control structures, command-line options and typed variables - Process handling, from job control to processes, coroutines and subshells - Debugging techniques, such as trace and verbose modes - Techniques for implementing system-wide shell customization and features related to system security
John Vince describes a range of mathematical topics to provide a foundation for an undergraduate course in computer science, starting with a review of number systems and their relevance to digital computers, and finishing with differential and integral calculus. Readers will find that the author´s visual approach will greatly improve their understanding as to why certain mathematical structures exist, together with how they are used in real-world applications. Each chapter includes full-colour illustrations to clarify the mathematical descriptions, and in some cases, equations are also coloured to reveal vital algebraic patterns. The numerous worked examples will consolidate comprehension of abstract mathematical concepts. Foundation Mathematics for Computer Science covers number systems, algebra, logic, trigonometry, coordinate systems, determinants, vectors, matrices, geometric matrix transforms, differential and integral calculus, and reveals the names of the mathematicians behind such inventions. During this journey, John Vince touches upon more esoteric topics such as quaternions, octonions, Grassmann algebra, Barycentric coordinates, transfinite sets and prime numbers. Whether you intend to pursue a career in programming, scientific visualisation, systems design, or real-time computing, you should find the author´s literary style refreshingly lucid and engaging, and prepare you for more advanced texts.
Turing´s famous 1936 paper introduced a formal definition of a computing machine, a Turing machine. This model led to both the development of actual computers and to computability theory, the study of what machines can and cannot compute. This book presents classical computability theory from Turing and Post to current results and methods, and their use in studying the information content of algebraic structures, models, and their relation to Peano arithmetic. The author presents the subject as an art to be practiced, and an art in the aesthetic sense of inherent beauty which all mathematicians recognize in their subject. Part I gives a thorough development of the foundations of computability, from the definition of Turing machines up to finite injury priority arguments. Key topics include relative computability, and computably enumerable sets, those which can be effectively listed but not necessarily effectively decided, such as the theorems of Peano arithmetic. Part II includes the study of computably open and closed sets of reals and basis and nonbasis theorems for effectively closed sets. Part III covers minimal Turing degrees. Part IV is an introduction to games and their use in proving theorems. Finally, Part V offers a short history of computability theory. The author has honed the content over decades according to feedback from students, lecturers, and researchers around the world. Most chapters include exercises, and the material is carefully structured according to importance and difficulty. The book is suitable for advanced undergraduate and graduate students in computer science and mathematics and researchers engaged with computability and mathematical logic.
This volume of the Encyclopedia of Complexity and Systems Science, Second Edition, is a unique collection of concise overviews of state-of-art, theoretical and experimental findings, prepared by the world leaders in unconventional computing. Topics covered include bacterial computing, artificial chemistry, amorphous computing, computing with Solitons, evolution in materio, immune computing, mechanical computing, molecular automata, membrane computing, bio-inspired metaheuristics, reversible computing, sound and music computing, enzyme-based computing, structural machines, reservoir computing, infinity computing, biomolecular data structures, slime mold computing, nanocomputers, analog computers, DNA computing, novel hardware, thermodynamics of computation, and quantum and optical computing. Topics added to the second edition include: social algorithms, unconventional computational problems, enzyme-based computing, inductive Turing machines, reservoir computing, Grossone Infinity computing, slime mould computing, biomolecular data structures, parallelization of bio-inspired unconventional computing, and photonic computing. Unconventional computing is a cross-breed of computer science, physics, mathematics, chemistry, electronic engineering, biology, materials science and nanotechnology. The aims are to uncover and exploit principles and mechanisms of information processing in, and functional properties of, physical, chemical and living systems, with the goal to develop efficient algorithms, design optimal architectures and manufacture working prototypes of future and emergent computing devices.
Work with blockchain and understand its potential application beyond cryptocurrencies in the domains of healthcare, Internet of Things, finance, decentralized organizations, and open science. Featuring case studies and practical insights generated from a start-up spun off from the author´s own lab, this book covers a unique mix of topics not found in others and offers insight into how to overcome real hurdles that arise as the market and consumers grow accustomed to blockchain based start-ups. You´ll start with a review of the historical origins of blockchain and explore the basic cryptography needed to make the blockchain work for Bitcoin. You will then learn about the technical advancements made in the surrounded ecosystem: the Ethereum virtual machine, Solidity, Colored Coins, the Hyperledger Project, Blockchain-as-a-service offered through IBM, Microsoft and more. This book looks at the consequences of machine-to-machine transactions using the blockchain socially, technologically, economically and politically. Blockchain Enabled Applications provides you with a clear perspective of the ecosystem that has developed around the blockchain and the various industries it has penetrated. What You´ll Learn Implement the code-base from Fabric and Sawtooth, two open source blockchain-efforts being developed under the Hyperledger Project Evaluate the benefits of integrating blockchain with emerging technologies, such as machine learning and artificial intelligence in the cloud Use the practical insights provided by the case studies to your own projects or start-up ideas Set up a development environment to compile and manage projects Who This Book Is For Developers who are interested in learning about the blockchain as a data-structure, the recent advancements being made and how to implement the code-base. Decision makers within large corporations (product managers, directors or CIO level executives) interested in implementing the blockchain who need more practical insights and not just theory.
What is the uniquely human factor in finding and using information to produce new knowledge? Is there an underlying aspect of our thinking that cannot be imitated by the AI-equipped machines that will increasingly dominate our lives? This book answers these questions, and tells us about our consciousness - its drive or intention in seeking information in the world around us, and how we are able to construct new knowledge from this information. The book is divided into three parts, each with an introduction and a conclusion that relate the theories and models presented to the real-world experience of someone using a search engine. First, Part I defines the exceptionality of human consciousness and its need for new information and how, uniquely among all other species, we frame our interactions with the world. Part II then investigates the problem of finding our real information need during information searches, and how our exceptional ability to frame our interactions with the world blocks us from finding the information we really need. Lastly, Part III details the solution to this framing problem and its operational implications for search engine design for everyone whose objective is the production of new knowledge. In this book, Charles Cole deliberately writes in a conversational style for a broader readership, keeping references to research material to the bare minimum. Replicating the structure of a detective novel, he builds his arguments towards a climax at the end of the book. For our video-game, video-on-demand times, he has visualized the ideas that form the book´s thesis in over 90 original diagrams. And above all, he establishes a link between information need and knowledge production in evolutionary psychology, and thus bases his arguments in our origins as a species: how we humans naturally think, and how we naturally search for new information because our consciousness drives us to need it.