FACTOID # 99: Thinking of becoming a teacher? Head to Switzerland. Teaching salaries there start at $US 33,000.
 
 Home   Encyclopedia   Statistics   Countries A-Z   Flags   Maps   Education   Forum   FAQ   About 
 
WHAT'S NEW
RECENT ARTICLES
More Recent Articles »
 

SEARCH ALL

FACTS & STATISTICS    Advanced view

Search encyclopedia, statistics and forums:

 

 

(* = Graphable)

 

 


Encyclopedia > Merge algorithm

Merge algorithms are a family of algorithms that run sequentially over multiple sorted lists, typically producing more sorted lists as output. This is well-suited for machines with tape drives. Use has declined due to large random access memories, and many applications of merge algorithms have faster alternatives when you have a random-access memory that holds all your data. Flowcharts are often used to represent algorithms. ... In computer science and mathematics, a sorting algorithm is an algorithm that puts elements of a list in a certain order. ... DDS tape drive. ... A four-megabyte RAM card for the VAX 8600 computer (circa 1986). ...


The general merge algorithm has a set of pointers p0..n that point to positions in a set of lists L0..n. Initially they point to the first item in each list. The algorithm is as follows: In mathematics, a set can be thought of as any collection of distinct things considered as a whole. ... It has been suggested that Software pointer be merged into this article or section. ...


While any of p0..n still point to data inside of L0..n instead of past the end:

  1. do something with the data items p0..n point to in their respective lists
  2. find out which of those pointers points to the item with the lowest key; advance one of those pointers to the next item in its list

Pseudocode

A simple non-recursive pseudocode implementation of merge with two lists might be written as follows:

 function merge(a, b) var list result var int i, j := 0 if length(a) = 0 return b if length(b) = 0 return a while (i < length(a)) and (j < length(b)) if a[i] <= b[j] add a[i] to result if a[i] = b[j] j := j + 1 i := i + 1 else add b[j] to result j := j + 1 while i < length(a) add a[i] to result i := i + 1 while j < length(b) add b[j] to result j := j + 1 return result 

Analysis

Merge algorithms generally run in time proportional to the sum of the lengths of the lists; merge algorithms that operate on large numbers of lists at once will multiply the sum of the lengths of the lists by the time to figure out which of the pointers points to the lowest item, which can be accomplished with a heap-based priority queue in O(lg n) time, for O(m lg n) time (where m is the sum of the lengths of the lists, and lg is log base 2). When merging two lists of length m, there is a lower bound of 2m − 1 comparisons required in the worst case. In computer science, a heap is a specialized tree-based data structure. ... A priority queue is an ADT (abstract data type) supporting the following two operations: add an element to the queue with an associated priority remove the element from the queue that has the highest priority, and return it The simplest way to implement a priority queue data type is to... It has been suggested that Landau notation be merged into this article or section. ...


The classic merge (the one used in merge sort) outputs the data item with the lowest key at each step; given some sorted lists, it produces a sorted list containing all the elements in any of the input lists, and it does so in time proportional to the sum of the lengths of the input lists. In computer science, merge sort or mergesort is a sorting algorithm for rearranging lists (or any other data structure that can only be accessed sequentially, e. ...


Uses

Merge can also be used for a variety of other things:

  • given a set of current account balances and a set of transactions, both sorted by account number, produce the set of new account balances after the transactions are applied; this requires always advancing the "new transactions" pointer in preference to the "account number" pointer when the two have equal keys, and adding all the numbers on either tape with the same account number to produce the new balance.
  • produce a sorted list of records with keys present in all the lists (equijoin); this requires outputting a record whenever the keys of all the p0..n are equal.
  • similarly for finding the largest number on one tape smaller than each number on another tape (e.g. to figure out what tax bracket each person is in).
  • similarly for computing set differences: all the records in one list with no corresponding records in another.

This article is about the data structure. ...

C

 void Merge(float v[], int start, int mid, int end) { int i, j, k; float* tmp = malloc(sizeof(float) * (end - start)); i = start; j = mid; k = 0; while ((i < mid) && (j < end)) { if (v[i] <= v[j]) tmp[k++] = v[i++]; else tmp[k++] = v[j++]; } while (i < mid) tmp[k++] = v[i++]; while (j < end) tmp[k++] = v[j++]; for (i = 0; i < (end-start); i++) v[start+i] = tmp[i]; free(tmp); } 

The C Programming Language, Brian Kernighan and Dennis Ritchie, the original edition that served for many years as an informal specification of the language The C programming language is a low-level standardized programming language developed in the early 1970s by Ken Thompson and Dennis Ritchie for use on the...

References

  • Donald Knuth. The Art of Computer Programming, Volume 3: Sorting and Searching, Third Edition. Addison-Wesley, 1997. ISBN 0-201-89685-0. Pages 158–160 of section 5.2.4: Sorting by Merging. Section 5.3.2: Minimum-Comparison Merging, pp.197–207.

  Results from FactBites:
 
SparkNotes: Merge Sort: The Merge Sort Algorithm (270 words)
To understand the efficiency of the mergesort algorithm it is useful to separate the merging from the sorting.
The merging process is linear each time two lists have to be merged, because it is simply done by doing one comparison for each pair of elements at the top of each sublist.
Because all log(n) sublists have to be merged, the efficiency of mergesort is O(nlog(n)).
Merge algorithm - Wikipedia, the free encyclopedia (284 words)
Merge algorithms are a family of algorithms that run sequentially over multiple sorted lists, typically producing more sorted lists as output.
Use has declined due to large random access memories, and many applications of merge algorithms have faster alternatives when you have a random-access memory that holds all your data.
When merging two lists of length m, there is a lower bound of 2m − 1 comparisons required in the worst case.
  More results at FactBites »


 

COMMENTARY     


Share your thoughts, questions and commentary here
Your name
Your comments
Please enter the 5-letter protection code

Want to know more?
Search encyclopedia, statistics and forums:

 


Lesson Plans | Student Area | Student FAQ | Reviews | Press Releases |  Feeds | Contact
The Wikipedia article included on this page is licensed under the GFDL.
Images may be subject to relevant owners' copyright.
All other elements are (c) copyright NationMaster.com 2003-5. All Rights Reserved.
Usage implies agreement with terms.