Add initial implementation of hw2
This commit is contained in:
commit
bc155dc53c
39
inversions.py
Normal file
39
inversions.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
def _inversions(xs):
|
||||||
|
# Can't be unsorted
|
||||||
|
if len(xs) < 2: return 0, xs
|
||||||
|
|
||||||
|
# Divide into two subarrays
|
||||||
|
leng = len(xs)//2
|
||||||
|
left = xs[:leng]
|
||||||
|
right = xs[leng:]
|
||||||
|
|
||||||
|
# Perform recursive call
|
||||||
|
lcount, left = _inversions(left)
|
||||||
|
rcount, right = _inversions(right)
|
||||||
|
|
||||||
|
# Reverse the lists to allow O(1) pop.
|
||||||
|
# Since we already have an O(n) copy,
|
||||||
|
# this doesn't increase complexity.
|
||||||
|
left.reverse()
|
||||||
|
right.reverse()
|
||||||
|
|
||||||
|
# Merge by popping
|
||||||
|
count = 0
|
||||||
|
total = []
|
||||||
|
while left != [] and right != []:
|
||||||
|
if left[-1] <= right[-1]:
|
||||||
|
total.append(left.pop())
|
||||||
|
else:
|
||||||
|
total.append(right.pop())
|
||||||
|
count += len(left)
|
||||||
|
|
||||||
|
# Add elements from non-empty array,
|
||||||
|
# if applicable.
|
||||||
|
left.reverse()
|
||||||
|
right.reverse()
|
||||||
|
total += left + right
|
||||||
|
return (count + lcount + rcount), total
|
||||||
|
|
||||||
|
def inversions(xs):
|
||||||
|
count, _ = _inversions(xs)
|
||||||
|
return count
|
13
longest.py
Normal file
13
longest.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
def _longest(ts):
|
||||||
|
if ts == []: return 0, 0
|
||||||
|
|
||||||
|
ldepth, lpath = _longest(ts[0])
|
||||||
|
rdepth, rpath = _longest(ts[2])
|
||||||
|
|
||||||
|
depth = max(ldepth, rdepth) + 1
|
||||||
|
cpath = max(lpath, rpath)
|
||||||
|
|
||||||
|
return depth, max(ldepth+rdepth, cpath)
|
||||||
|
|
||||||
|
def longest(ts):
|
||||||
|
return _longest(ts)[1]
|
26
msort.py
Normal file
26
msort.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
def msort(xs):
|
||||||
|
if len(xs) < 2: return xs
|
||||||
|
|
||||||
|
leng = len(xs) // 2
|
||||||
|
left = msort(xs[:leng])
|
||||||
|
right = msort(xs[leng:])
|
||||||
|
|
||||||
|
# Reversing is O(n), but so is copying, so
|
||||||
|
# this does not worsen complexity.
|
||||||
|
# It does slow us down, but... oh well :)
|
||||||
|
left.reverse()
|
||||||
|
right.reverse()
|
||||||
|
|
||||||
|
# Since we're reversed, the smallest numbers
|
||||||
|
# are on the end. We can thus use pop (O(1))
|
||||||
|
total = []
|
||||||
|
while left != [] and right != []:
|
||||||
|
if left[-1] <= right[-1]:
|
||||||
|
total.append(left.pop())
|
||||||
|
else:
|
||||||
|
total.append(right.pop())
|
||||||
|
|
||||||
|
left.reverse()
|
||||||
|
right.reverse()
|
||||||
|
total += left + right
|
||||||
|
return total
|
26
report.txt
Normal file
26
report.txt
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
Q0: Which of the following sorting algorithms are (or can be made) stable?
|
||||||
|
A: mergesort, quicksort with first element as pivot, selection sort with insertion,
|
||||||
|
and insertion sort are stable.
|
||||||
|
|
||||||
|
Debrief:
|
||||||
|
1. Approximately how many hours did you spend on this assignment?
|
||||||
|
|
||||||
|
Less than 1 hour.
|
||||||
|
|
||||||
|
2. Would you rate it as easy, moderate, or difficult?
|
||||||
|
|
||||||
|
Seemed easy, I didn't have any difficulties.
|
||||||
|
|
||||||
|
3. Did you work on it mostly alone, or mostly with other people?
|
||||||
|
Note you are encouraged to discuss with your classmates,
|
||||||
|
but each students should submit his/her own code.
|
||||||
|
|
||||||
|
Alone.
|
||||||
|
|
||||||
|
4. How deeply do you feel you understand the material it covers (0%–100%)?
|
||||||
|
|
||||||
|
Seems like 100%. Didn't have any difficulties.
|
||||||
|
|
||||||
|
5. Any other comments?
|
||||||
|
|
||||||
|
In my opinion, it kinda sucks that only 1 code assignment is auto-graded.
|
Loading…
Reference in New Issue
Block a user