Assignment: 1: Name: Hiba Khan
Assignment: 1: Name: Hiba Khan
SECTION: A
Case Study
Objective
The primary objective of the task is to show students various knowledge areas that make
constant use of Data Structures and Algorithms.
Description:
Applications of computer programming can be found in almost every field of science and
technology. With programming, use of data structures and writing algorithms is an embedded
part. Writing efficient algorithms and managing data effectively leads to efficient computer
programs. Apart of so many areas that are affected by the use efficient data structures &
algorithms, some of these areas are given below:
✓Computer Graphics
As a professional programmer, your job is to dig out the use of data structures & algorithms in
any of the two fields provided above. For this, you have to study at least three
articles/papers/essays from any source like internet, books, magazines etc. and find out the
answers to the following questions for each of the selected field:
i. Describe how the use of efficient data structures & algorithms can be helpful in the selected
field. The description should not be less than 150 words and more than 200 words.
ii. Discuss, with concrete reasoning, at least two cases where concepts of data structures &
algorithms can be specifically applied in this field. Each case should not be less than 250 words
and not more than 300 words.
iii. Any ideas from your side than can further be used to improve the system you have discussed
in ii.
2
Name: Hiba Khan Roll Number: 19B-045-CE
Different kinds of data structures are suited to different kinds of applications, and some are
highly specialized to specific tasks. For example, relational databases commonly use B-tree
indexes for data retrieval, while compiler implementations usually use hash tables to look up
identifiers.
Data structures provide a means to manage large amounts of data efficiently for uses such as
large databases and internet indexing services. Usually, efficient data structures are key to
designing efficient algorithms. Some formal design methods and programming languages
emphasize data structures, rather than algorithms, as the key organizing factor in software
design. Data structures can be used to organize the storage and retrieval of information stored in
both main memory and secondary memory. Data structures are generally based on the ability of a
computer to fetch and store data at any place in its memory, specified by a pointer—a bit string,
representing a memory address, that can be itself stored in memory and manipulated by the
program. Thus, the array and record data structures are based on computing the addresses of data
items with arithmetic operations; while the linked data structures are based on storing addresses
of data items within the structure itself. Many data structures use both principles, sometimes
combined in non-trivial ways.
The implementation of a data structure usually requires writing a set of procedures that create
and manipulate instances of that structure. The efficiency of a data structure cannot be analyzed
separately from those operations. This observation motivates the theoretical concept of an
abstract data type, a data structure that is defined indirectly by the operations that may be
performed on it, and the mathematical properties of those operations. There are numerous types
of data structures, generally built upon simpler primitive data types:
An array is a number of elements in a specific order, typically all of the same type. Elements are
accessed using an integer index to specify which element is required. Typical implementations
allocate contiguous memory words for the elements of arrays. Arrays may be fixed-length or
resizable.
A linked list is a linear collection of data elements of any type, called nodes, where each node
has itself a value, and points to the next node in the linked list. The principal advantage of a
linked list over an array, is that values can always be efficiently inserted and removed without
relocating the rest of the list. Certain other operations, such as random access to a certain
element, are however slower on lists than on arrays.
3
Name: Hiba Khan Roll Number: 19B-045-CE
A record (also called tuple or struct) is an aggregate data structure. A record is a value that
contains other values, typically in fixed number and sequence and typically indexed by names.
The elements of records are usually called fields or members.
A union is a data structure that specifies which of a number of permitted primitive types may be
stored in its instances, e.g. float or long integer. Contrast with a record, which could be defined
to contain a float and an integer; whereas in a union, there is only one value at a time. Enough
space is allocated to contain the widest member data type.
A tagged union (also called variant, variant record, discriminated union, or disjoint union)
contains an additional field indicating its current type, for enhanced type safety.
A class is a data structure that contains data fields, like a record, as well as various methods
which operate on the contents of the record. In the context of object-oriented programming,
records are known as plain old data structures to distinguish them from classes.
An algorithm is an effective method that can be expressed within a finite amount of space and
time and in a well-defined formal language for calculating a function. Starting from an initial
state and initial input, the instructions describe a computation that, when executed, proceeds
through a finite number of well-defined successive states, eventually producing output and
terminating at a final ending state. The transition from one state to the next is not necessarily
deterministic; some algorithms, known as randomized algorithms, incorporate random input.
The concept of algorithm has existed for centuries; however, a partial formalization of what
would become the modern algorithm began with attempts to solve the Entscheidungs problem
(the “decision problem“) posed by David Hilbert in 1928. Subsequent formalizations were
framed as attempts to define “effective calculability” or “effective method”;[ those
formalizations included the Gödel–Herbrand–Kleene recursive functions of 1930, 1934 and
1935, Alonzo Church‘s lambda calculus of 1936, Emil Post‘s “Formulation 1” of 1936, and Alan
Turing‘s Turing machines of 1936–7 and 1939. Giving a formal definition of algorithms,
corresponding to the intuitive notion, remains a challenging problem.
An informal definition could be a set of rules that precisely defines a sequence of operations
which would include all computer programs, including programs that do not perform numeric
calculations. Generally, a program is only an algorithm if it stops eventually.
4
Name: Hiba Khan Roll Number: 19B-045-CE
An enumerably infinite set is one whose elements can be put into one-to-one correspondence
with the integers. Thus, Boolos and Jeffrey are saying that an algorithm implies instructions for a
process that creates output integers from an arbitrary input integer or integers that, in theory, can
be arbitrarily large. Thus an algorithm can be an algebraic equation such as y = m + n – two
arbitrary input variables m and n that produce an output y. But various authors’ attempts to
define the notion indicate that the word implies much more than this, something on the order of
Representations of algorithms can be classed into three accepted levels of Turing machine
description:
1. High-level description
“…prose to describe an algorithm, ignoring the implementation details. At this level we do not
need to mention how the machine manages its tape or head.”
2. Implementation description
“…prose used to define the way the Turing machine uses its head and the way that it stores data
on its tape. At this level we do not give details of states or transition function.”
3. Formal description
Most detailed, “lowest level”, gives the Turing machine’s “state table”.
Answer ii: