1. Clarifying the Question
2. Confirming Input
3. Test Cases
4. Brainstorming
5. Runtime Analysis
6. Coding
7. Debugging
8. Wrap-up
history of software bugs
http://archive.wired.com/software/coolapps/news/2005/11/69355?currentPage=all
随机应变 ABCD: Always Be Coding and … : хороший
1. Clarifying the Question
2. Confirming Input
3. Test Cases
4. Brainstorming
5. Runtime Analysis
6. Coding
7. Debugging
8. Wrap-up
history of software bugs
http://archive.wired.com/software/coolapps/news/2005/11/69355?currentPage=all
class Node(object): def __init__(self, value): self.value = value self.left = None self.right = None class BinaryTree(object): def __init__(self, root): self.root = Node(root) def search(self, find_val): return self.preorder_serach(tree.root, find_val) def print_tree(self): return self.preorder_print(tree.root, "")[:-1] def preorder_search(self, start, find_val): if start: if start.value == find_val: return True else return self.preorder_search(start.left, find_val) or self.preorder_search(start.right, find_val) return False def preorder_print(self, start, traversal): if start: traversal += (str(start.value) + "-") traversal = self.preorder_print(start.left, traversal) traversal = self.preorder_print(start.right, traversal) return traversal
Binary Search Tree
class Node(object): def __init__(self, value): self.value = value self.left = None self.right = None class BST(object): def __init__(self, root): self.root = Node(root) def insert(self, new_val): self.insert_helper(self.root, new_val) def insert_helper(self, current, new_val): if current_value < new_val: if current.right: self.insert_helper(current.right, new_val) else: current.right = Node(new_val) else: if current.left: self.insert_helper(current.left, new_val) else: current.left = Node(new_val) def search(self, find_val): return self.search_helper(self.root, find_val) def search_helper(self, current, find_val): if current: if current.value == find_val: return True elif current.value < find_val: return self.search_helper(current.right, find_val) else: return self.search_helper(current.left, find_val) return False
graph(network): how things is connect one another which is similar to tree.
0[0, 1, 0, 0]
1[1, 0, 1, 1]
2[0, 1, 0, 1]
3[0, 1, 1, 0]
In Python, the map concept appears as a built-in data type called a dictionary. A dictionary contains key-value pairs. Dictionaries is extremely easy to use and useful. Here’s a sample of setting up a dictionary.
locations = {'North America': {'USA': ['Mountain View']}} locations['North America']['USA'].append('Atranta') locations['Asia'] = {'India': ['Bangalore']} locations['Asia']['China'].append = ['Shanghai'] locations['Africa'] = {'Egypt': ['Cairo']} usa_sorted = sorted(locations['North America']['USA']) for city in usa_sorted print city asia_cities = [] for countries, cities in location['Asia'].iteritems(): city_country = cities[0] + " - " + countries asia_cities.append(city_country) asia_sorted = sorted(asia_cities) for city in asia_sorted: print city
When hash table collision, bucket store data.
Hash Value = (ASCII Value of First Letter * 100) + ASCII Value of Second Letter
hash table
class HashTable(object): def __init__(self): self.table = [None]*10000 def store(self, string): hv = self.calculate_hash_value(string) if hv != -1: if self.table[hv] != None: self.table[hv].append(string) else self.table[hv] = [string] def lookup(self, string): hv = slef.calculate_hash_value(string) if hv != -1: if self.table[hv] != None: if string in self.table[hv]: return hv return -1 def calculate_hash_value(self, string): value = ord(string[0])* 100 + ord(string[1]) return -1
Tree DFS, In-order
def binarySearch(alist, item): first = 0 last = len(alist)-1 found = False while first <= last and not found: midpoint = (first + last) // 2 if alist[midpoint] == item: found = True else: if item < alist[midpoint]: last = midpoint-1 else: first = midpoint+1 return found
recursion
function recursive(input): if input <= 0 return input else output = recursive(input - 1) return output
fib
function getFib(position){ if (position == 0) { return 0; } if (position == 1) { return 1; } var first = 0, second = 1, next = first + second; for (var i = 2; i < position; i++){ first = second; second = next; next = first + second; } return next; }
def get_fib(position): if position == 0 or position == 1: return position return get_fib(position -1) + get_fib(position -2)
margin sort efficiency
log(n)
1, 4(log n1),8(log n3), 16(log n4)
ease yourself by commic
https://xkcd.com/1185/
margin sort text
http://algs4.cs.princeton.edu/22mergesort/
quick sort
def quicksort(array): if len(array) < 1: return array pivot = array[0] left = [] right = [] for x in range(1, len(array)): if array[x] <= pivot: left.append(array[x]) else: right.append(array[x]) left = quicksort(left) right = quicksort(right) foo = [pivot] return left + foo + right
list: A B C
set: C A B
class Queue: def __init__(self, head=None): self.storage = [head] def enqueue(self, new_element): self.storage.append(new_element) def peek(self): return self.storage[0] def dequeue(self): return self.storage.pop(0)
def delete_first(self): deleted = self.head if self.head: self.head = self.head.next deleted.next = None return deleted
class Element(object): def __init__(self, value): self.value = value self.next = None class LinkedList(object): def __init__(self, head=None): self.head = head def append(self, new_element): current = self.head if self.head: while current.next: current = current.next current.next = new_element else: self.head = new_element def insert_first(self, new_element): new_element.next = self.head self.head = new_element def delete_first(self): if self.head: deleted_element = self.head temp = deleted_element.next self.head = temp return deleted_element else: return None class Stack(object): def __init__(self,top=None): self.ll = LinkedList(top) def push(self, new_element): self.ll.insert_first(new_element) def pop(self): return self.ll.delete_first()
This class to represent how classy someone
or something is.”Classy” is interchangable with “fancy”.
If you add fancy-looking items, you will increase
your “classiness”.
class Classy(object): def __init__(self): self.items = [] def addItem(self, item): self.items.append(item) def getclassiness(self): classiness = 0 if len(self.items) > 0: for item in self.items: if item == "tophat": classiness += 2 elif item == "bowtie": classiness += 4 elif item == "monocle": classiness += 5 return classiness
notation: expression
():parenthesis
“””input manatees: a list of “manatees”, where one manatee is represented by a dictionary
a single manatee has properties like “name”, “age”, et cetera
n = the number of elements in “manatees”
m = the number of properties per “manatee” (i.e. the number of keys in a manatee dictionary)”””
def example1(manatees):
for manatee in manatees:
print manatee[‘name’]
def example2(manatees):
print manatees[0][‘name’]
print manatees[0][‘age’]
def example3(manatees):
for manatee in manatees:
for manatee_property in manatee:
print manatee_property, “: “, manatee[manatee_property]
def example4(manatees):
oldest_manatee = “No manatees here!”
for manatee1 in manatees:
for manatee2 in manatees:
if manatee1[‘age’] < manatee2['age']:
oldest_manatee = manatee2['name']
else:
oldest_manatee = manatee1['name']
print oldest_manatee
class Element(object): def __init__(self, value): self.value = value self.next = None class LinkedList(object): def __init__(self, head=None): self.head = head def append(self, new_element): current = self.head if self.head: while current.next: current = current.next current.next = new_element else: self.head = new_element def get_position(self, position): counter = 1 current = self.head if position < 1: return None while current and counter <= position: if counter == position: return current current = current.next counter += 1 return None def insert(self, new_element, position): counter = 1 current = self.head if position > 1: while current and counter < position: if counter == position -1: new_element.next = current.next current.next = new_element current = current.next counter += 1 elif position == 1: new_element.next = self.head self.head = new_element def delete(self, value): current = self.head previous = None while current.value != value and current.next: previous = current current = current.next if current.value == value: if previous: previous.next = current.next else: self.head = current.next
sudo npm install -g bower
https://bower.io/
run bower install
var numLetters = function(letter){ return new Function('times', "if (times < 0) return ''; var result = ''; times = Math.round(times); while(times--){ result += '" + letter +"'; } return result;" ); } [/javascript] [javascript] <div id="beach-info"></div> <script type="text/template" id="beach-supplies"> <% if(supplies.empty) { %> <p> Whaaaat? Get to the beach anyway! </p> <% } %> <ul> <li> Sunscreen - <% if (supplies.sunscreen) { %> check! <% } %> </li> <% if (supplies.towel) { %> <li> Towel - Yes, a <%= supplies.towel =%> one! </li> <% } %> <li> Shades - <% if (supplies.shades) { %> check! <% } else { %> sadly, no!! <% } %></li> </ul> </script>
var string = "Hi, my name is *(name)*. And I *(emotion)* this *(thing)*!"; var logResult = template( string ); logResult('Richard', 'love', 'green mint icecream', 2);
Yomen
npm install -g grunt-cli bower yo generator-karma generator-angular
http://knockoutjs.com/
<user-bio> <h3>Richard</h3> <img src="img/richard_profile.jpg" alt="Richard's profile picture"> <p>Before working at NNN, Richard... </user-bio>
$('#my-elem').click(function(e){ //the element has been clicked.. do stuff })
document.body.innerHTML = ”;
document.body.style.background= “white”;
var num = [1, 2, 3];
for(var i = 0; i < nums.length; i++){ var num = nums[i]; var elem = document.createElement('div'); elem.textContent = num; elem.addEventListener('click', function(){ alert(num); }); document.body.appendChild(elem); } [/javascript] [javascript] getCurrentCat: function(){ return model.currentCat; }, getCats: function(){ return model.cats; }, setCurrentCat: function(cat){ model.currentCat = cat; }, incrementCounter: function(){ model.currentCat.clickCount++; catView.render(); } }; [/javascript]