### Sorting and Searching Algorithms: A Cookbook

"... This is a collection of algorithms for sorting and searching. Descriptions are brief and intuitive, with just enough theory thrown in to make you nervous. I assume you know C, and that you are familiar with concepts such as arrays and pointers. The first section introduces basic data structures and ..."

Abstract
- Add to MetaCart

This is a collection of algorithms for sorting and searching. Descriptions are brief and intuitive, with just enough theory thrown in to make you nervous. I assume you know C, and that you are familiar with concepts such as arrays and pointers. The first section introduces basic data structures and notation. The next section presents several sorting algorithms. This is followed by techniques for implementing dictionaries, structures that allow efficient search, insert, and delete operations. The last section illustrates algorithms that sort data and implement dictionaries for very large files. Source code for each algorithm, in ANSI C, is available at the site listed below. Permission to reproduce this document, in whole or in part, is given provided the original web site listed below is referenced, and no additional restrictions apply. Source code, when part of a software project, may be used freely without reference to the author.

### Assuring Application-level Correctness Against Soft Errors

"... Traditionally, research in fault tolerance has required architectural state to be numerically perfect for program execution to be correct. However, in many programs, even if execution is not 100 % numerically correct, the program can still appear to execute correctly from the user’s perspective. To ..."

Abstract
- Add to MetaCart

Traditionally, research in fault tolerance has required architectural state to be numerically perfect for program execution to be correct. However, in many programs, even if execution is not 100 % numerically correct, the program can still appear to execute correctly from the user’s perspective. To quantify user satisfaction, application-level fidelity metrics (such as PSNR) can be used. The output for such applications is defined to be correct if the fidelity metrics satisfy a certain threshold. However, such applications still contain instructions whose outputs are critical – i.e. their correctness decides if the overall quality of the program output is acceptable. In this paper, we present an analysis technique for identifying such critical program segments. More importantly, our technique is capable of guaranteeing application-level correctness through a combination of static analysis and runtime monitoring. Our static analysis consists of data flow analysis followed by control flow analysis to find static critical instructions which affect several instructions. Critical instructions are further refined into likely non-critical and likely critical sets in a profiling phase. At runtime, we use a monitoring scheme to monitor likely noncritical instructions and take remedial actions if some likely noncritical instructions become critical. Based on this analysis, we minimize the number of instructions that are duplicated and checked at runtime using a software-based fault detection and recovery technique [20]. Put together, our approach can lead to 22 % average energy savings for multimedia applications while guaranteeing application-level correctness, when compared to a recent work [9], which cannot guarantee application-level correctness. Comparing to the approach proposed in [20] which guarantees both application-level and numerical correctness, our method achieves 79 % energy reduction. 1.

### CONTENTS

"... This is a collection of algorithms for sorting and searching. Descriptions are brief and intuitive, with just enough theory thrown in to make you nervous. I assume you know a high-level language, such as C, and that you are familiar with programming concepts including arrays and pointers. The first ..."

Abstract
- Add to MetaCart

This is a collection of algorithms for sorting and searching. Descriptions are brief and intuitive, with just enough theory thrown in to make you nervous. I assume you know a high-level language, such as C, and that you are familiar with programming concepts including arrays and pointers. The first section introduces basic data structures and notation. The next section presents several sorting algorithms. This is followed by a section on dictionaries, structures that allow efficient insert, search, and delete operations. The last section describes algorithms that sort data and implement dictionaries for very large files. Source code for each algorithm, in ANSI C, is available at the site listed below. Most algorithms have also been translated to Visual Basic. If you are programming in Visual Basic, I recommend you read Visual Basic Collections and Hash Tables, for an explanation of hashing and node representation. Permission to reproduce this document, in whole or in part, is given provided the original web site listed below is referenced, and no additional restrictions apply. Source code, when part of a software project, may be used freely without reference to the author.

### ADistributed Typeserver and Protocol for a Linda Tuple Space

"... Linda is a parallel programming paradigm which involves controlling access to a distributed shared memory called a tuple space.The tuple space is comprised of a number of typed data object called tuples.Inour implementation of Linda we choose to partition the tuple space so that a set of data types ..."

Abstract
- Add to MetaCart

Linda is a parallel programming paradigm which involves controlling access to a distributed shared memory called a tuple space.The tuple space is comprised of a number of typed data object called tuples.Inour implementation of Linda we choose to partition the tuple space so that a set of data types is managed by each host in a local area network. To access the tuple space it is necessary to determine which host is currently managing tuples of a particular type. To t his end we introduce the notion of a typeserver,aprocess which is executed by each host in alocal area network and is able to determine the location of tuples of a given type. If no host is managing a given tuple type then a host is able to create it locally.Each typeserver in the system executes a locking and agreement protocol which ensures that if many processes wish to simultaneously create a tuple type, only one succeeds and all contending hosts receive the same information of the tuple type'swhereabouts. This paper de...

### Production Rule Verification for Quasi-Delay-Insensitive Circuits

"... this document, we present an automated method for the verification of delayinsensitive circuits expressed as production rules. We begin with a description of Martin's design method and specification of the production rule notation. We precisely define stability and noninterference and relate th ..."

Abstract
- Add to MetaCart

this document, we present an automated method for the verification of delayinsensitive circuits expressed as production rules. We begin with a description of Martin's design method and specification of the production rule notation. We precisely define stability and noninterference and relate them to delay-insensitivity. We give sequential and parallel algorithms for performing verification. We provide several examples of the verification method and describe our implementation of the algorithms. We conclude with a summary of this work. 2 Production Rules

### An Efficient ROBDD Package

, 1996

"... Many interesting problems in computer science can be modelled using Boolean expressions. In formal verification for example, a common task is to determine whether a given model of a system satisfies some properties supposed to hold for the system. Such problems are often modelled as transition syste ..."

Abstract
- Add to MetaCart

Many interesting problems in computer science can be modelled using Boolean expressions. In formal verification for example, a common task is to determine whether a given model of a system satisfies some properties supposed to hold for the system. Such problems are often modelled as transition systems over Boolean variables, and thus a computer-aided solution requires some efficient techniques for manipulating Boolean expressions. Reduced