Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives...
Transcript of Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives...
![Page 1: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/1.jpg)
Big O & ArrayList
15-121 Fall 2019Margaret Reid-Miller
![Page 2: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/2.jpg)
Today
• Quiz• Big O• ArrayLists
Fall 2019 15-121 (Reid-Miller) 2
![Page 3: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/3.jpg)
Big O: Formal Definition• Let T(n) – the number of operations performed in an
algorithm as a function of n.• T(n) ∈O(f(n)) if and only if there exists two constants,
n0 > 0 and c > 0 and a function f(n) such that for all n > n0, cf(n)≥ T(n).
Fall 2019 15-121 (Reid-Miller) 3
![Page 4: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/4.jpg)
More on Big O • Big O gives us an upper-bound approximation on the
complexity of a computation.• That is, think of Big O as “<=”
• n + 1000 is O(n), but it’s also O(n2) and O(n3). We try to keep the bound as tight as possible, though.
Fall 2019 15-121 (Reid-Miller) 6
![Page 5: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/5.jpg)
Big-O when algorithm is A then B• Suppose an algorithm is
A followed by B. • Then the overall complexity of the algorithm is
max (O(A), O(B)).Examples:
O(log n) + O(n) = O(n log n) + O(n) = O(n log n) + O(n2) = O(2n) + O(n2) =
Fall 2019 15-121 (Reid-Miller) 7
O(n)O(n log n)O(n2)
O(2n)
![Page 6: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/6.jpg)
Big-O when algorithm is A encloses B
• E.g., Nested loops: A is the outer loop B is the inner loop, or A calls B repeatedly
• Then the overall complexity of the algorithm is O(A) * O(B),
where O(A) excludes the complexity of B.Examples:
O(n) * O(log n) = O(n) * O(n log n) = O(n) * O(1) =
Fall 2019 15-121 (Reid-Miller) 8
O(n log n)O(n2 log n)
O(n)
![Page 7: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/7.jpg)
ArrayLists
Fall 2019 15-121 (Reid-Miller) 9
![Page 8: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/8.jpg)
Abstract Data Types vs Data Structures
• Abstract Data Type: An ADT is a formal description of
the behavior (semantics) of a type.
• The representation/organization of the data is
hidden.
• It defines what kind of operations can be applied to
the underlying data.
• Data Structure: A data structure is a concrete
representation/organization of the data and
implementation of the ADT behaviors.
Fall 2019 15-121 (Reid-Miller) 10
![Page 9: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/9.jpg)
The ArrayList Class• For Java folks, an ArrayList is like an array, but:
• It’s a class, so we construct it and call methods on it.• It’s resizable. It grows as we add elements and shrinks
as we remove them.
• For Python folks, an ArrayList is like a Python list, but:• We do not use subscript notation.
• ArrayLists (like arrays) are homogeneous.ArrayList <String> names = new ArrayList<String>();
Fall 2019 15-121 (Reid-Miller) 11
![Page 10: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/10.jpg)
ArrayList methodsboolean add(E obj)
Appends obj to end of this list; returns truevoid add(int index, E obj)
Inserts obj at position index (0 <= index <= size)void clear()
Removes all the elements from this list.boolean contains(Object obj)
Returns true if this list contains obj.E get(int index)
Returns the element at position index int indexOf(Object obj)
Returns the index of the first occurrence of obj in this list,or returns -1 if this list does not contain obj
Fall 2019 15-121 (Reid-Miller) 12
java.util.ArrayList<E>
![Page 11: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/11.jpg)
ArrayList methodsboolean isEmpty()
Returns true if the list is empty and false otherwiseE remove(int index)
Removes element at position index;Returns the element formerly at position index.
boolean remove(Object obj)Removes the first occurrence of obj, if present;Returns true if this list contained obj, false otherwise.
E set(int index, E obj)Replaces element at position index with obj; Returns the element formerly at position index.
int size()Returns the number of elements in the list.
Fall 2019 15-121 (Reid-Miller) 13
java.util.ArrayList<E>
![Page 12: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/12.jpg)
ArrayList complexity
int size()add(E obj) add(int index, E obj)get(int index)set(int index, E obj)
contains(Object obj) remove(int index)remove(Object obj)indexOf(Object obj)clear()isEmpty()
Fall 2019 15-121 (Reid-Miller) 14
Worst BestO(1)O(1)*O(n) O(1)*O(1)O(1)
O(n) O(1)O(n) O(1)O(n) O(1)O(n) O(1)O(1)O(1) *amortized
![Page 13: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/13.jpg)
ArrayList demoimport java.util.ArrayList;ArrayList<String> names = new ArrayList<String>();
names.add(“Margaret”);
names.add(“Dave”);
names.get(1);
names.set(0, “Mark”);
names.add(1, “Tom”);
names.remove(1);
Fall 2019 15-121 (Reid-Miller) 15
Margaret
Margaret Dave
Dave
Mark Dave
Mark Tom Dave
Mark Dave
![Page 14: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/14.jpg)
Wrapper Classes• ArrayLists can only store references to objects, not
primitives.• All primitive types have a corresponding object type
(wrapper class).• Example: Integer, Double, Boolean,…
Integer x = new Integer(62);Integer y = new Integer(“12”);int n = y.intValue();
Fall 2019 15-121 (Reid-Miller) 16
![Page 15: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/15.jpg)
ArrayLists with IntegerArrayList<Integer> intList =
new ArrayList<Integer>();
intList.add(new Integer(3));int n = intList.get(0).intValue();
YUCK!
Fall 2019 15-121 (Reid-Miller) 17
![Page 16: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/16.jpg)
Java does conversion between primitive and wrapper types
ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(3); int n = intList.get(0);
• Like mixing primitive types, based on the types of parameters and variables Java converts between primitive and wrapper types
Fall 2019 15-121 (Reid-Miller) 18
![Page 17: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/17.jpg)
Auto-boxingInteger a = i++; // auto-boxingInteger b = j + 2;int k = a + b; // auto-unboxingSystem.out.println(
a.toString() + b.toString); // concatSystem.out.println(a + b); // unboxed
Warning: if (list.get(0) == list.get(1))
Does not auto-unbox! It compares the references to Integer objects. Fall 2019 15-121 (Reid-Miller) 19
![Page 18: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/18.jpg)
Example: count// Returns the number of names in the given list // with the given number of letterspublic static int count( names,
int numLetters) {int count = 0;for (int i = 0; i < ; i++) {
if ( ) {count++;
}}return count;
}
Fall 2019 15-121 (Reid-Miller) 20
ArrayList<String>
names.size()names.get(i).length() == numLetters
![Page 19: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/19.jpg)
Example: getNamesOfLength// Returns a list of names in the given list // with the given number of letterspublic static getNamesOfLength(
ArrayList<String> names, int numLetters) {result;
result = ;for (int i = 0; i < ; i++) {
if (names.get(i).length() == numLetters) {;
}}return result;
}Fall 2019 15-121 (Reid-Miller) 21
ArrayList<String>
names.size()
result.add(names.get(i))
ArrayList<String>new ArrayList<String>()
![Page 20: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/20.jpg)
Example: removeNamesOfLength// Removes all names in the given list // with the given number of letterspublic static void removeNamesOfLength(
ArrayList<String> names, int numLetters) {for (int i = 0; i < names.size(); i++) {
if (names.get(i).length() == numLetters) {names.remove(i);
}}
}
Oops! When doesn’t this code work correctly?
Fall 2019 15-121 (Reid-Miller) 22
It won’t remove 2 consecutive names.
![Page 21: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/21.jpg)
Example: removeNamesOfLength// Removes all names in the given list // with the given number of letterspublic static void removeNamesOfLength(
ArrayList<String> names,int numLetters) {
for (int i = 0; i < names.size(); i++) {if (names.get(i).length() == numLetters) {
names.remove(i);i--;
}}
}
Fall 2019 15-121 (Reid-Miller) 23
Solution 1:Decrement i after each removal. Ugly
![Page 22: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/22.jpg)
Example: removeNamesOfLength// Removes all names in the given list // with the given number of letterspublic static void removeNamesOfLength(
ArrayList<String> names,int numLetters) {
int i = 0;while (i < names.size()) {
if (names.get(i).length() == numLetters)names.remove(i);
else i++;
}}Fall 2019 15-121 (Reid-Miller) 24
Solution 2:Increment only when don’t remove.
![Page 23: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/23.jpg)
Example: removeNamesOfLength// Removes all names in the given list // with the given number of letterspublic static void removeNamesOfLength(
ArrayList<String> names,int numLetters) {
for (int i = names.size()-1; i >= 0; i--) {if (names.get(i).length() == numLetters) {
names.remove(i);}
}}
Fall 2019 15-121 (Reid-Miller) 25
Solution 3:Loop backward. Move only the elements you are keeping. Sweet.
![Page 24: Big O & ArrayListmrmiller/15-121/Slides/09-BigO... · 2019-09-23 · More on Big O •Big O gives us an upper-bound approximation on the complexity of a computation. •That is, think](https://reader030.fdocuments.in/reader030/viewer/2022040819/5e65ec462eafdd47ae2bb429/html5/thumbnails/24.jpg)
Exercises
Rewrite contactList class using an ArrayListinstead of an array. What fields do need? What fields can you drop?
Fall 2018 15-121 (Reid-Miller) 26