Project 1 – Survey of an Algorithm
CS3330 Data Structures and Algorithms
Term 5 2017: May 29 – July 30
Dr. Jack Davault
Overview
This assignment consists of writing a research paper surveying a popular algorithm. Your paper must conform to
the American Psychological Association (APA) writing style. There are many good online resources for the APA
style. Your paper must use reputable scholarly references. Most Web sources such as blog, forums, and personal
website are not considered reputable (do not cite or use any Wiki or Answer.com type websites). Your paper should
use 11pt or 12pt font size for the main text. Other text such as figure and table labels and captions, if applicable,
should be no smaller then 10pt. This assignment weighs 15% of your course grade.
A typical research paper for this assignment is about 7-10 double spaced pages (not including the cover page or
reference page). Sample research papers from other classes are available in the folder named Survey Papers in the
Examples and Resources (for Project 1) folder within the Learning Modules area in Blackboard. These papers are
not perfect, but they will give you an idea on what a good research paper looks like.
An example survey paper template is also provided for download in the Examples and Resources (for Project 1)
folder. I recommend that you use this template, but it is not required; however, your paper must include all of the
required information for the assignment and must follow the APA style of writing.
I also recommend that you review all of the notes and recommendation in the Examples and Resources (for Project
1) area to avoid many of the common mistakes that occur in formal research writing. For example, avoid telling
stories. Your paper should have a formal tone like the reputable research articles that you read; cite your sources
within the main text of the paper (even for paraphrased content and ideas); and avoid using contractions and words
such as “I” and “you” in formal writing; etc.
Topics
Choose one of the following algorithms areas to write about. Potential algorithm topics related to the algorithm area
are included in parenthesis as examples.
1. Hashing Algorithms (e.g. SHA-3; Message Digest-5; Cryptography algorithms such as Advanced
Encryption Standard, Blowfish, Elliptic curve cryptography; Digital signature algorithms; Bitcoin Mining)
2. Compression Algorithms (e.g. LZO, Data differencing, Huffman Coding)
3. String Matching (e.g Google’s PageRank algorithm, DNA sequence algorithms, Spell checking algorithms)
4. Memory Management (e.g. Garbage Collection, Buddy Methods, Paging algorithms, Sequential-Fit
Methods)
5. Other algorithms areas. If you would like to survey an algorithm area other than one of those listed above,
you must contact me for approval prior to proceeding and submitting your paper. Unapproved off topic
papers will result in a 25% reduction in your overall score for this assignment.
Note: If you have taken this course before, you must choose a different topic for your survey paper than the one
you chose previously.
1
Content
I highly recommend that you use section headings in your paper. The paper must use uniform margins of 1 in. (2.54
cm) on the top, bottom, left, and right of every page. At a minimum, your paper should include the following
sections:
Title Page
The title page should include the title of the paper and your name and course number. The heading of each page should
include the title of the paper on the left corner and the page number on the right corner. If you would like to include an
abstract, it must be on a separate page after the title page. All text in the paper except for figure and table captions must be
double spaced.
1.
Introduction
The introduction should provide brief background information on the algorithm. It should also briefly discuss the problem
that the algorithm tries to solve and provide a very brief overview on rest of the paper.
2.
Origin
The origin section should identify the person or organization that initially designed or developed the algorithm. Support
your finding on the origin using reference citations from books, journal articles, or conference proceedings.
3.
Detailed Description
This section should describe the algorithm and provide one or two simple but specific examples that illustrate how the
algorithm works. You may include additional sections (or subsections) as necessary. As an example, this section can
include the follow type of information:
a.
b.
c.
d.
e.
f.
g.
4.
Identify the algorithms original intension
Identify the algorithms primary purpose
Identify the complexity of the algorithm (i.e. its big-O)
Provide a brief and simple example showing how the algorithm works. For example, a paper on data
compression could discuss the details of the MD5 on LZO implementation. Walk through a couple of simple
examples using a small data set to help illustrate exactly how the algorithm works. Diagrams and figures also
help to get the point across.
If appropriate, provide a brief description mentioning how the algorithm is different from other algorithms
that solve the same or similar problem
Do not include long source code listings. If you must include source code, only provide small sample snippets
or pseudo-code that will help your discussion. Be sure to properly cite your sources.
You must support your discussion using reference citations from books and/or journal articles within the
main text of the paper.
Primary Uses
This section can provide the following type of information:
a.
b.
c.
d.
5.
What were the algorithms first successes?
Identify any failures or short comings of the algorithm
Give an example of who or what software products are currently using the algorithm
Support your findings using reference citations from books and/or journal articles
Future Considerations
The paper must discuss future considerations for the algorithm. Explain what the literature says about it potential new uses
or new areas where the algorithm is being used.
For example:
2
a.
b.
c.
6.
Are other new algorithms being made based on this one?
Or is the algorithm dead – i.e. not being used anymore for some reason?
Support your findings using reference citations from books and/or journal articles.
Summary and Conclusion
For example:
a. Briefly summarize what you have discussed.
References
The references section must on a separate page. All sources listed in your reference list must be cited within the main
text of the paper using the proper APA citation format. The reference list should be single spaced. The second and
subsequence lines of the reference must be intended to follow the APA formatting style of writing. Remember that the
title of the section for APA must be “References” and not “Work Cited” as used in MLA.
a.
b.
The references section must include a minimum of four (4) scholarly/reputable sources not including your
textbook. If you use the textbook as a source, you must include four other sources.
References must consist of books, journal articles, conference proceedings, which are the best type of
sources. For every three (3) references that you list, no more than one (1) reference can be from a
reputable scholarly Web source. A Web source without an author’s name or a date usually indicates
that the work is most likely not from a reputable source, and should not be used for this assignment.
Do not cite or quote from blogs, Wiki sites, Answers.com, Stackoverflow.com, or other nonreputable/non-scholarly sources. You will not receive credit for those types of sources.
Use these sections as a guide for the content and structure for your paper; however feel free to include additional
sections that you feel are also be relevant to your topic. A Microsoft Word document template that is pre-formatted
in APA format can be downloaded here:
https://www.sworps.tennessee.edu/training/APA_6_0/resources/apa_doc_templates.html
Grading Heuristics
The overall weight of the paper will be 20 points broken down as follows:
[3 points] Grammar and spelling
[3 points] Format of paper, APA style, and citations with in the paper
[10 points] Depth of coverage and originality
[4 points] References (at least 4 reputable sources)
Other Notes
Note that all research papers will be automatically run through Turnitin.com. No more than 20% of the content
in your paper can be exact words or quoted text from various sources. Also, note that exact words from your
sources must be cited.
All sources where you received your information must be properly cited within the main text: even paraphrased
material must be properly cited next to the appropriate sentences or paragraphs.
Feel free to post questions in the Ask the Instructor forum. You may also contact me individually by email. You
may also discuss this assignment among yourselves in the Student Lunge.
Additional Resources
APA (2003). Publication Manual of the American Psychological Association. Washington:
American Psychological Association.
3
NIST (n.d.). Dictionary of Algorithms and Data Structures. Available online at
http://www.nist.gov/dads.
Shrunk, W., White, E.B., Angell, R. (1999). The Elements of Style, 4th Edition. New
York: Longman
Troy University Online Library Services. Available online at http://benning.troy.edu/
library.cfm
Bibme is a freely web based tool that will properly format your references in APA style. You can access this site at:
http://www.bibme.org/. Remember that all of the references you list in your references section must be properly
cited somewhere within the main text of your paper.
4
Survey of the Java Programming Language
By Vaughan Lynch
CS 2265
November 27, 2005
Lynch 1
Survey of the Java Programming Language
What if you could write a program, compile it and run on any platform or
operating system? Well, this is exactly what Java is capable of doing. With it, you can
practically compile your program once and have it run anywhere. The only thing that
each machine needs is the Java Virtual Machine. So long as you have it, you can run the
same program on a Windows, Linux, UNIX or Macintosh operating system. This
capability makes Java a very unique language. Java has a very interesting origin, overall
design, comparison to other languages and a very bright future.
Java was developed by a group at Sun Micosystems. According to Herbert
Schildt, the group that conceived Java included “James Golsing, Patrick Naughton, Chris
Wrath, Ed Frank and Mike Sheridan” (Schildt 2005). One interesting fact is that the
original name for Java was Oak. Its original implementation was released in 1992.
According to an article on Wikipedia the name Oak had to be dropped because a
“trademark search revealed that the name Oak had already been taken by a video adaptor
card manufacturer” (Wikipedia n.d.). The name that the group decided to use to replace
Oak was Java. No one exactly knows where the name Java came from but of course it is
the name that has stuck for this language. In 1995, Java was released for public use for
the first time. The original design of the language was for consumer devices such
microwaves and not the internet.
While Java is being used in many embedded devices such as cell phones and other
devices, its use was greatly enhanced by the development and continued development of
the World Wide Web. In fact, according to Schildt, “Had the web not taken shape about
the same that that Java was being implemented, Java might have remained a useful but
Lynch 2
obscure language for programming consumer electronics” (Schildt 2005). As stated
above, this was very true in that Java did not begin to see wide use until the World Wide
Web developed. Like C++ and other languages, Java is capable of dynamic programming
or programs that can change their information. This ability has allowed Java to become a
great boon for the web. This is because languages such as HTML, that were and still are
used a lot on the web, were only capable of displaying static pages. According to Aaron
Walsh, “Static means the web was designed to display information that does not change
as you view it.” (Walsh 1998). You can therefore imagine that Java was a great
advancement for the web.
To know that Java can display dynamic content and it is platform independent is
great, but how does it actually work? To start, you need to look at the function of the
Java compiler. Instead of making executable machine level code like C++, the Java
compiler makes what Sun calls byte code. According to Herbert Schildt, “Byte code is a
highly optimized set of instructions designed to be executed by the Java run-time system
which is called the Java Virtual Machine (JVM) (Schildt 2005). As stated above, this
makes it so that the only thing a client system needs to have is the JVM, which makes the
code very portable. Just the unique ability of the of the JVM to translate byte code in to
machine code is okay, but unlike C++ which has the use of the operating system’s API
(Application Program Interface) such as the Windows API or Mac API, Java has its own.
According to David Flanagan, “the Java Platform provides APIs with a comparable
breadth and depth to those defined by an operating system” (Flanagan 2005). This also
makes a program more portable because the API usually allows a programmer to design a
very advanced program. Without the Java API the portability would be extremely limited
Lynch 3
except for the most basic of programs. Java has some other great benefits such as security
and internationalization. Java was designed with an eye towards making it secure.
How is it possible that it can do this? Flanagan showed, “the Java platform allows
users to download untrusted code over a network and run it in a secure environment
where it can do no harm” (Flanagan 2005). Imagine how advantageous this can be to a
programmer. He or she would not have to worry about someone high jacking his or her
program to do harm. Also, the end user would not have to worry when they download a
Java program. One last interesting feature is the international features of Java. Flanagan
again points out “Java uses 16-bit Unicode characters that represent the phonetic alphabet
and ideographic character sets of the entire world” (Flanagan 2005). This is different
from other languages which usually use characters that represent the English alphabet.
While Java has very interesting features, it is not so different from other languages like
C++.
Java, like C++, Visual Basic and C#, is an object oriented language. A lot of very
popular languages have this capability because of the power it gives to the programmer.
Another similarity that has Java is uses very similar syntax to C++, but it is not just an
update of C++ or C++ for the web. In fact, Herbert Schildt says “to make that
comparison could be a large mistake” (Schildt 2005). One big difference between the
Java and languages such as C++ is the portability factor. As stated above, Java is very
portable. Languages like C++ must be compiled for every processor type such as Power
PC or x86. In addition to this, for every complex application, C++ is dependent on OS
APIs. So, it will be recoded for every OS, Java does not have this problem since it has its
own APIs. Java does have one drawback to language such as C++ or Visual Basic.
Lynch 4
Which is because it is portable, it runs a little slower than a program that has been
specifically complied for a certain processor. The reason for this is that a program that
has been specifically complied for a processor is already in a code that the processor
understands, and Java byte code has to be interpreted into machine code by the virtual
machine when the code is run. Obviously, this will make Java execute code more slowly.
So, if a program needs to run as fast a possible Java may not be the best choice. One
interesting thing the Java framework has done is that it has changed, somewhat, how
languages are designed. The programming language C# is very similar to Java. This
development really shows that Java has changed how programmers and designers look at
programming language.
The future for Java looks outstanding. The new version of Java, 5.0, has
dramatically increased and upgraded features in the language. In fact David Flanagan
pointed out the new version of, “Java introduces a number of changes to the core
language itself” (Flanagan 2005). In fact, the previous version was known as 1.4 but the
version was so different that Sun decided to increase the version number. At first, it
looks weird that Sun went to Version 5. Should not the new version be 2.0? Well, the
reason Sun did not use this is because they had already marketed Java Version 1.2 as Java
2. So, to decrease confusion, they opted to call the new version 5.0.
The outlook for programs using Java looks excellent. More and more devices
such as cell phones and other devices use Java. In fact, even NASA has used Java code.
According to Aaron Walsh on July 4, 1997, the Mars rover pathfinder “landed on the
surface of the red planet that day, was powered in part by Java” (Walsh 1998). It would
be easy to imagine that with a cell phone, Java would be the perfect language. This is
Lynch 5
because Java is not processor dependent. This would make it easier on a company to use
different hardware based on what the phone was needed to do. Also it would make it a
cell phone provider’s job simpler to provide after market programs, because as long a
phone had java running on it would probably be able to run any Java based program. In
addition to embedded devices, the use of Java for desktop programs is increasing. The
reason for this is obvious. Java makes the life of a system or network administrator easier
with it they would not have to be concerned about an operating system. This would make
a business more flexible and would make a migration to any operating system simpler.
For instance say a company has a few hundred computers and they need to develop a
program to run on all of them. The only problem is that not all of the computers are
running the same operating system. They are running Windows, Mac OS X, and Linux.
In this case Java would be the best choice for the program because it would be able to run
on all three of the systems. Any talk about the future of Java would not be complete
without talking about the internet and World Wide Web.
Greg Murray pointed out that, “Anyone who has used Flickr, GMail, Google
Suggest, or Google Maps will realize that a new breed of dynamic web applications is
emerging” (Murray 2005). A lot of these websites are based on a new technology called
AJAX (Asynchronous JavaScript Technology and XML), which was invented to allow a
webpage to be more dynamic than before. According to Greg Murray websites that use
AJAX “look and act very similar to traditional desktop applications without relying on
plug-ins or browser-specific features” (Murray 2005). Some people would think that this
kind of webpage would be reserved for very high end applications that not may people
are using. This is not the case, the Google Map program has really changed the way
Lynch 6
online users think of a map site. A good portion of this is due to the AJAX technology
that it uses. Also the only really good way to see how this technology has changed the
way map programs are looked is to see that companies such as Yahoo are starting to use
similar technology. Google’s GMail is staring to have the same effect on web based
email programs. The future for this type of technology is really bright. More technology
like this will and should be invented. Walsh put it best when he pointed out that “with
Java, you are dealing with a fresh technology and facing absolutely unlimited field of
dreams” (Walsh 1998). This is very true because Java is being used more and more in
web pages. With almost any web page you visit there is bound to be a little Java code on
it especially the commercial sites such as Google. As the web becomes more important to
daily life, the amount of pages that will need dynamic content will increase dramatically.
This will increase the very high demand for programmers that are efficient programming
in Java. In fact William Stanek pointed out that, “Companies are paying huge sums to
programmers who can demonstrate expertise in Java” (Stanek 2001).
Java is a very interesting and unique language. It is hard to believe that this
language has only been around for a little over tens years. Compared to languages such as
C++ this makes Java a very young language. This shows how far Java has come a long
way and still has a long way to go. With it portability, the sky is the limit for what it is
capable of doing. While it may never replace languages, like C++, it is definitely a great
compliment to any language. Java’s uniqueness will have it around for a long time to
come.
Lynch 7
References
Flanagan, David. (2005). Java in a Nutshell, Fifth Edition. Sebastopol, CA: O’Reilly
Media, Inc.
Java programming language. (n.d.). Wikipedia. Retrieved November 8, 2005
http://en.wikipedia.org/wiki/Java_programming_language
Murray, Greg. (2005, June 9). Asynchronous JavaScript Technology and XML (AJAX)
With Java 2 Platform, Enterprise Edition. Sun Microsystems Inc. Retrieved
November 10, 2005, from
http://java.sun.com/developer/technicalArticles/J2EE/AJAX/index.html?cid=5975
4
Schildt, Herbert. (2005). Java: The Complete Reference, J2SE 5 Edition. Emeryville, CA:
McGraw-Hill/Osborne
Stanek, William. (2001)Java 2 Certification All-in-One Exam Guide, Third Edition.
Berkley, CA: Osborne/McGraw-Hill.
Walsh, Aaron. (1998). Java for Dummies, Third Edition. Foster City, CA: IDG Books
Worldwide, Inc.
THE DYNAMICS OF RECURSION
The Dynamics of Recursion
Tonsolia L Folson
Troy University
Dr. Jack Davault
August 28, 2005
Folson 2
The Dynamics of Recursion
1. Introduction
Recursion was primarily considered to be used for analog calculations; however, it has
been later used to obtain analog illustration of classical calculation complexity classes. In the
context of this research, the examination will be the dynamics of recursion and the fundamental
uses of the varying recursive functions. The ideal purpose is to provide an overall generalized
understanding with sufficient function examples as they apply to programming and the
algorithmic logic, which demonstrate the recursive objective one is trying to achieve. In
demonstrating recursion, it is the intentions of this report to breakdown the varying methods in
such a way it makes it easily understandable for debugging recursive subprograms. First,
discussing the origin and how it is linked to modern day computing. Second, explain the
functions of recursion and its algorithmic logic. Lastly, the report will examine the instances
where recursion is not the most efficient method.
2. Origin of Recursion
Recursion refers to several related concepts in mathematics and logic, the origins of
which date back much further than modern computing. However, “the systematic study of
recursion began in the 1920’s when mathematical logic began to treat questions of definability,
computability, and decidability” (Ralston, 2000, p. 1507). The formulation of recursive
functions and its theories can be directly linked to the works of Alonzo Church, Kurt Gödel,
Stephen Kleene, and Alan Turing. During the 1930s, the forenamed mathematicians published
papers dealing with the theories of computation and the tasks involved with solving complex
problems, which seemed unsolvable. Kurt Gödel delivered a series of lectures on the newly
developed mathematical logic called “general recursive function” that he can be attributed.
Folson 3
Kurt Gödel took the work of Alan Turing and Alonzo Church and demonstrated it was
impossible to capture a portion of the mathematical logic as it relates to the Halting Problem. In
turn, he demonstrated the limitations of the axiomatic method. The proof can be read in Gödel’s
Incompleteness Theorem. In his paper Gödel stated, “any sufficiently rich axiomatic system
contains undecidable but nonetheless true propositions” (Ralston, Reilly, & Hemmendinger,
2000, p. 1813). The widespread acceptances of Gödel’s theory, lead to the idea of “general
recursive functions.” Therefore, the emergence of computers and software programming became
second nature to use recursive function calculations through high-level languages based
exclusively on these published papers. In the 1950s, developing algorithms for solving computer
programs became a powerful technique and a significant milestone for the computer science
field.
3. Description of Recursion
Recursion is a powerful logic algorithm that has provided some rather simple solutions to
complex problems. It emerges during our daily lives quite often. Have you ever discussed the
origin of the chicken and the egg? On the other hand, have you ever been awaken from a dream
only to discover that you were still dreaming? In order to understand recursion you must first
understand recursion. A common method of solving a large problem is to break it down into
smaller problems that can be solved rather easily. The solutions to the smaller problem are then
combined to generate the solution to the original, larger problem. A recursive function consists
of two parts: the base case and the general case (Malik, 2004). Here is the basic format of a
recursive function:
Folson 4
returnType recursiveFunction(argument)
{
if (Boolean expression)
// this is the base case
return 1;
return recursiveFunction(argument – 1); // the general case
}
When developing a recursive function, it is essential to define the base case. The base
case is the most important piece of recursion. Without it, the recursive function would not stop
calling itself until all of the computer resources are consumed, thereby causing the computer to
crash. The base case is the case for which the solution is obtained directly. A control structure
(usually an “if – else” statement) uses the base case to determine whether the solution has been
defined. As the recursive function calls itself, the arguments are used by a control structure to
determine if the definition has been reached. It is important to determine the correct return value
to pass the recursive function call. If the function is not correctly determined, it may render the
base case useless resulting in a system crash. The general case then must eventually be reduced
down to the base case.
With each function call, the recursive definition breaks down the problem into smaller
versions of the original. When the base case is reached, the chain of instances of each recursive
function is returned in succession back to the point in the code where the first call was made. As
control is passed back, the mini-solutions are combined so that the solution to the original
problem is automatically generated and provided back to the function that started the recursive
cycle. The function uses a “divide and conquer approach”. The problem is broken down into
several sub-problems that are similar to the original. These smaller sub-problems are solved
recursively. The solutions of these sub-problems are then combined to create the solution to the
original problem (Cormen, Leiserson, Rivest, & Stein, 2001, p. 28).
Folson 5
There are varying types of recursion. Direct recursion as explained above, occurs when
a function calls itself. Indirect recursion occurs when a function calls another function and
eventually results in the original function call. Tail recursion is another type of recursive call. In
this type, there is nothing to be done once the recursive calls are returned (Drozdek, 2005). We
have seen this type when we use recursion to print a string of characters in reverse order. Once
the recursive call is completed, no further calculations need to be made; control is simply passed
back to the point in the program that started the recursive calls. “Tail recursion is nothing more
than a glorified loop and can be easily replaced by one” (Drozdek, 2005, p. 178).
4. Primary Uses
Although recursion is a very powerful tool, it can also be very dangerous if it is not used
properly. Recursion is, in some instances, used to simulate the functionality of repetition. In
LISP (List Programming), there are no loop constructs, so recursion provides the only means by
which these structures can be coded. LISP is very popular with programmers of artificial
intelligence, and it is through the power of recursion they are able to efficiently search through
trees (or lists) when designing code. The Cisco IOS (Internetworking Operating System) uses
recursion in some of its routing protocols to build the routing tables for their internetworking
equipment. The PBR (Policy-based Routing) Recursive Next Hop feature enhances route maps
to enable configuration of a recursive next hop IP address that is used by PBR. The recursive
next hop IP address is installed in the routing table and can be a subnet that is not directly
connected. If the recursive next hop IP address is not available, packets are routed using the
default route (PBR recursive”, 2005).
Folson 6
Network administrators use VLSM (Variable Length Subnet Masking) to recursively divide
an organization’s IP address space into hierarchical levels (Kane, 2004). VLSM allows an
organization to use more than one subnet mask within the same network. This technique enables
more efficient routing of packets by reducing the number of entries in the routing tables of the
company’s routers. Nevertheless, if not used correctly, the network administrator could
inadvertently create a recursive routing failure in the network – a problem that may not be easy
to detect in a large heterogeneous network. In areas of mathematics, a Polish mathematician
Benoit Mandlebrot developed a discipline of mathematics called fractal geometry. Fractals,
geometrical forms that appear the same on all scales, developed independently of chaos and at
first appeared to be unrelated, but after a closer examination they are realized as being closely
related (Harris & Stocker, 1998).
Fractals are a new and useful tool for expressing Chaos Theory and provide a means for us
to explore the geometry of irregular shapes of nature. Snowflakes, galaxy clusters, clouds, and
other natural phenomena all share the same fractal properties. In fractal geometry, certain sets of
equations are recursively repeated many times, creating fractal images that are plotted on a
computer screen, producing incredibly complex images. "Using fractal geometry, Koch’s
snowflake is formed from an isosceles triangle by constructing three Koch’s curves. In each
recursive step, the perimeter increases by a factor of 4/3, while the area remains finite" (Harris &
Stocker, 1998, p. 113). It is with these techniques that computer programmers create the
stunning visual images we see in video games. These techniques are also used in HDTV (High
Definition Televisions) to display images of crystal clarity.
Folson 7
5. Iteration v Recursion
So far, we have discussed the power of recursion and its many uses that have had positive
impacts on our daily lives. However, this does not mean recursion is always the best option
when designing optimal code. There are many uses where recursion is not a desired solution.
There are times where an iterative solution is more efficient than a recursive solution. The
following recursive function generates a sequence of Fibonacci numbers:
long fib(unsigned long n)
{
if (n
Purchase answer to see full
attachment