Download **** 1 - Postech

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Linked list wikipedia , lookup

Comparison of programming languages (associative array) wikipedia , lookup

Array data structure wikipedia , lookup

Transcript
CSED233: Data Structures (2014F)
Lecture4: Arrays
Bohyung Han
CSE, POSTECH
[email protected]
Arrays
• A data structure holding a group of variables under a single
identifiers
byte[] anArrayOfBytes;
int[] anArrayOfLongs;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;
int[] a;
a = new int[2];
int[] b = {1, 2, 3, 4};
int bLength = b.length;
//
//
//
//
array declaration without assignment
specify the length of the array
array declaration with assignment
get the length of an array
2
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Array
• Two‐dimensional arrays
 Array of arrays
int[][] Y = new int[8][10];
 Size of two‐dimensional array
• Number of rows: Y.length
• Number of elements in each row: Y[i].length
• Note: Number of elements in each row may be different.
• Java: Array class
 http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
3
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Abstract Data Type (ADT)
• Definition
 A mathematical model of the data objects that make up a data type
as well as the functions that operate on these objects
 Defined indirectly, by the operations that may be performed on it and
by mathematical constraints on the effects of those operations
• ADT is composed of




A data structure
A set of operations (called the methods or operations)
A precise description of the types of the methods (called a signature)
A precise set of rules about how it behaves (called the abstract
specification or the axiomatic description)
 An implementation hidden from the programmer
4
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Array List ADT
• Array list is not array, but an extension of array.
 An array list stores a sequence of arbitrary objects.
 An element can be accessed, inserted or removed by specifying its
index (number of elements preceding it).
 An exception is thrown if an incorrect index is given, e.g., negative one.
 Java: http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
• Java: Exception
 An event, which occurs during the execution of a program, that disrupts
the normal flow of the program's instructions
 The Java platform provides numerous exception classes.
• All the classes are descendants of the Throwable class.
• All allow programs to differentiate among the various types of exceptions.
 Example: if (size == 0) { throw new EmptyStackException(); }
5
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Array List ADT
• Main methods
 get(integer i): returns the element at index i without removing it
 set(integer i, object o): replaces the element at index i with
o and returns the old element
 add(integer i, object o): inserts a new element o to have
index i
 remove(integer i): removes and returns the element at index i
• Additional methods:
 size(): returns the number of elements in this list
 isEmpty(): returns true if this list contains no elements
6
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Array‐Based Implementation
• Array A of size n
A
0 1 2
n
i
• Size of array list
 Number of elements in the array
 Stored in a variable
• Operations
 get(i):
• Returns A[i]
• Runs in 𝑂 1 time
 set(i,o):
• Performs t = A[i] and A[i] = o, and returns t
• Runs in 𝑂 1 time
7
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Element Insertion
• Operation
 add(o)
 Adds an object at the end of the array list, A[n]
 Increases the size of the array by 1
• Time complexity
 𝑂 1
A
0 1 2
n
A
o
0 1 2
n
8
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Element Insertion
• Operation
 add(i,o)
 Makes a room for the new element by shifting forward the n‐i
elements A[i], …, A[n‐1]
 Adds an object at A[i]
• Worst case time complexity
 𝑂 𝑛 when i = 0
A
0 1 2
i
n
0 1 2
i
n
0 1 2
o
i
A
A
n
9
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Element Removal
• Operation
 remove(i)
 Removes an element, A[i]
 Fills the hole left by the removed element by shifting backward the
n‐i‐1 elements A[i+1], …, A[n‐1]
• Worst case time complexity
 𝑂 𝑛 when i = 0
0 1 2
o
i
n
0 1 2
i
n
0 1 2
i
A
A
A
n
10
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Performance
• Space complexity
 The space used by the data structure: 𝑂 𝑛
• Time complexity of methods
Method
Time complexity
size()
𝑂 1
insert()
𝑂 1
get(i)
𝑂 1
set(i,o)
𝑂 1
add(o)
𝑂 1
add(i,,o)
𝑂 𝑛 time in the worst case
remove(i)
𝑂 𝑛 time in the worst case
11
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Growable Array‐based Array List
• When the array is full in an add operation
 Throwing an exception
 Replacing the array with a larger one
• How large should the new array be?
 Incremental strategy: increase the size by a constant
 Doubling strategy: double the size
12
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Growable Array‐based Array List
Algorithm add(o)
Input array A of n integers
Output array A of n+1 integers
Create a new array S (larger than A)
if n = A.length then
S  new array of size …
for i  0 to n-1 do
S[i]  A[i]
Copy the elements in A to S
AS
Replace A with S
nn+1
A[n-1]  o
Increase array size by 1 and add o
as the last element
13
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Comparison of the Strategies
• Incremental strategy vs. doubling strategy
 Comparison by analyzing the total time 𝑇 𝑛 needed to perform a
series of 𝑛 add(o) operations
 We assume that we start with an empty array.
 We call amortized time of an add operation the average time taken by
an add over the series of operations, i.e., 𝑇(𝑛)/𝑛
14
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Incremental Strategy
• How many times is array replaced?
 𝑘 = 𝑛/𝑐 times (𝑐: increment constant)
• The total time 𝑇 𝑛 of a series of add operations is
proportional to
𝑘 𝑘+1
𝑛 + 𝑐 + 2𝑐 + 3𝑐 + 4𝑐 + ⋯ + 𝑘𝑐 = 𝑛 + 𝑐
2
Number of iterations
Constructions of new array with larger sizes
• Time complexity
 𝑛+𝑐
𝑘 𝑘+1
2
=𝑛+
𝑛 𝑛+1
2𝑐
= 𝑂 𝑛2
 The amortized time of an add operation is 𝑂 𝑛 .
15
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Doubling Strategy
• How many times is array replaced?
 𝑘 = log 2 𝑛 times
• The total time 𝑇 𝑛 of a series of add operations is
proportional to
𝑘
𝑛 + 1 + 2 + 4 + 8 + ⋯+ 2
Geometric series
= 3𝑛 − 1
2
4
1
Number of iterations
Constructions of new array with larger sizes
1
8
• Time complexity
 𝑇 𝑛 =𝑂 𝑛
 The amortized time of an add operation is 𝑂 1 .
16
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Example with Array List
public class ArrayListTest
{
public static void main(String args[])
{
ArrayList<Integer> IntegerList = new ArrayList<Integer>();
System.out.println("Empty array? " + IntegerList.isEmpty());
for(int i=0; i<20; i++)
IntegerList.add(i);
System.out.println("Num. of elements: " + IntegerList.size();
for(int i=1; i<IntegerList.size(); i*=2)
IntegerList.remove(i);
System.out.println("Num. of elements: " + IntegerList.size();
System.out.println("\nElements in array");
for(int i=0; i<IntegerList.size(); i++)
System.out.println("\t" + i + ":" + IntegerList.get(i));
}
}
17
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Simple Implementation of ArrayList
import java.io.*;
public class SimpleArrayList<T>
{
protected int count;
// number of elements in ArrayList
protected T[] contents; // array of stored values
protected static int DEFAULT_CAPACITY = 10;
// constructors
public SimpleArrayList()
{
contents = (T[]) new Object[DEFAULT_CAPACITY];
}
public SimpleArrayList(int initCapacity)
{
contents = (T[]) new Object[initCapacity];
}
18
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Simple Implementation of ArrayList
public void add (T newElem)
{
if (count == contents.length)
{
T temp[] = contents;
contents = (T[]) new Object[2*count];
for ( int i = 0; i < count; i++ )
contents[i] = temp[i];
}
contents[count++] = newElem ;
}
public T get(int index)
{
if (index < 0 || index >= count )
throw new IndexOutOfBoundsException("ArrayList:" + index) ;
return contents[index] ;
}
19
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Simple Implementation of ArrayList
public int size()
{
return count;
}
public T remove (int index)
{
if (index < 0 || index >= count )
throw new IndexOutOfBoundsException("ArrayList:" + index);
T temp = contents[index];
for (int j = index; j < count‐1; j++)
contents[j] = contents[j+1];
count‐‐;
return temp;
}
}
20
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
Summary
• An ADT consists of
 A data structure:
• A collection of data, and
• its organization, structure, properties;
 The operations that can be performed:
• What can be done to change, manipulate, or look at the data
• Information hiding
 The “user” of an ADT must know enough to:
• Create one of them, and
• Perform the operations,
Some members, constructors and methods
of ArrayList should be known.
 but not
• What fundamental construct is used to store the data, and
• How the operations are done. Detailed implementation of ArrayList
class does not need to be known.
21
CSED233: Data Structures
by Prof. Bohyung Han, Fall 2014
22