PREV INDEX NEXT

Author: Stan Eisenstat
Subject: Re: [Cs223] Writing efficient algorithms
Date: Monday, 30 Mar 2020, 21:13:17


    > Message Posted By: Unknown
    >
    > I find myself struggling at times to write efficient code/come up with
    > efficient algorithms. For example, when I completed the sample midterm on
    > my own for the the first time, I was able to come up with a solution for
    > problem 5 that met the 2/3 credit requirement, but after that I hit a
    > brick wall. ...

That problem was one of the review problems for the
midterm; I gave several solutions at the review session.
=====

    >        ...  When you explained the algorithm that met the full credit
    > requirement in class, it made perfect sense to me and I could come up with
    > it now, but I don't know if I could have ever figured that out on my own
    > without some guidance. ...

The ability to devise new algorithms is something that
develops with practice.
=====

    >                   ...  On the current problem set, I found it pretty easy
    > to meet the 4*#compares + N requirement, but I have also hit a wall here
    > with finding a solution that meets the 2*#compares + N requirement.

The key idea is that in Note C.5 of the specification:

  5. Achieving C * #compares calls to addD()/pushD() by calling them at most
     C*M times at the level of recursion where there are M items to sort.

Your solution satisfies this with C = 4; to achieve C = 2
you have to reduce the amount of data movement.  The other
parts of Note C are also relevant.
=====

    > It's frustrating for me because I really want to get better at solving
    > problems like these on my own the first time without any guidance. I
    > realize that this is a pretty general question, but do you have any
    > suggested resources for getting better at this kind of thing (advice,
    > books, etc.)?

Read the textbook for CPSC 365.

--Stan-
PREV INDEX NEXT