Grokking Algorithms



Yüklə 348,95 Kb.
Pdf görüntüsü
səhifə110/122
tarix05.12.2023
ölçüsü348,95 Kb.
#173611
1   ...   106   107   108   109   110   111   112   113   ...   122
grokking-algorithms-illustrated-programmers-curious

answers 
to exercises
CHAPTER 1
1.1
Suppose you have a sorted list of 128 names, and you’re searching 
through it using binary search. What’s the maximum number of 
steps it would take? 
 Answer:
7. 
1.2
Suppose you double the size of the list. What’s the maximum 
number of steps now? 
 Answer:
8.
1.3
You have a name, and you want to find the person’s phone 
number in the phone book. 
 Answer:
O(log 
n
).
1.4
You have a phone number, and you want to find the person’s 
name in the phone book. (Hint: You’ll have to search through
the whole book!)
 Answer:
O(
n
).
1.5
You want to read the numbers of every person in the phone book. 
 Answer:
O(
n
).
1.6
You want to read the numbers of just the
 A
s. 
 Answer:
O(
n
). You may think, “I’m only doing this for 1 out 
of 26 characters, so the run time should be O(
n
/26).” A simple 
rule to remember is, ignore numbers that are added, subtracted, 
multiplied, or divided. None of these are correct Big O run times: 


222
answers to exercises
O(
n
+ 26), O(
n
- 26), O(
n
* 26), O(
n
/ 26). They’re all the same as 
O(
n
)! Why? If you’re curious, flip to “Big O notation revisited,” in 
chapter 4, and read up on constants in Big O notation (a constant 
is just a number; 26 was the constant in this question).
CHAPTER 2
2.1
Suppose you’re building an app to keep track of your finances. 
Every day, you write down everything you spent money on. At 
the end of the month, you review your expenses and sum up 
how much you spent. So, you have lots of inserts and a few reads. 
Should you use an array or a list? 
 Answer:
In this case, you’re adding expenses to the list every day 
and reading all the expenses once a month. Arrays have fast reads 
and slow inserts. Linked lists have slow reads and fast inserts. 
Because you’ll be inserting more often than reading, it makes sense 
to use a linked list. Also, linked lists have slow reads only if you’re 
accessing random elements in the list. Because you’re reading
 
every 
element in the list, linked lists will do well on
 reads 
too. So a 
linked list is a good solution to this problem.
2.2
Suppose you’re building an app for restaurants to take customer 
orders. Your app needs to store a list of orders. Servers keep adding 
orders to this list, and chefs take orders off the list and make them. 
It’s an order queue: servers add orders to the back of the queue
and the chef takes the first order off the queue and cooks it.


223
Would you use an array or a linked list to implement this queue? 
(Hint: linked lists are good for inserts/deletes, and arrays are good 
for random access. Which one are you going to be doing here?) 
 Answer:
A linked list. 
Lots of inserts are happening (servers 
adding orders), which linked lists excel at. You don’t need search 
or random access (what arrays excel at), because the chefs always 
take the first order off the queue.
2.3
Let’s run a thought experiment. Suppose Facebook keeps a list of 
usernames. When someone tries to log in to Facebook, a search is 
done for their username. If their name is in the list of usernames, 
they can log in. People log in to Facebook pretty often, so there are 
a lot of searches through this list of usernames. Suppose Facebook 
uses binary search to search the list. Binary search needs random 
access—you need to be able to get to the middle of the list of 
usernames instantly. Knowing this, would you implement the list 
as an array or a linked list? 
 Answer: 
A sorted array. Arrays give you random access—you can 
get an element from the middle of the array instantly. You can’t 
do that with linked lists. To get to the middle element in a linked 
list, you’d have to start at the first element and follow all the links 
down to the middle element. 
2.4
People sign up for Facebook pretty often, too. Suppose you 
decided to use an array to store the list of users. What are the 
downsides of an array for inserts? In particular, suppose you’re 
using binary search to search for logins. What happens when you 
add new users to an array?
 Answer: 
Inserting into arrays is slow. Also, if you’re using binary 
search to search for usernames, the array needs to be sorted. 
Suppose someone named Adit B signs up for Facebook. Their 
name will be inserted at the end of the array. So you need to sort 
the array every time a name is inserted!

Yüklə 348,95 Kb.

Dostları ilə paylaş:
1   ...   106   107   108   109   110   111   112   113   ...   122




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin