I just thought I'd take a little time to help people with HW5 with some
helpful tips that will help you prioritize your time.
1. Correctness matters most. When grading your assignment, we do not care if
it is not the fastest in the world if it is incorrect. A large part of your
assignment's grade will come from testing the correctness of your
implementations on smallish test cases.
2. Create your own test cases. Write them in JUnit. Submit this with your
homework. This is in no way a requirement, but you'd be giving yourself
more work by not doing it. Nothing beats the peace of mind that comes from
last minute changes that still pass all tests.
3. Find a good "stopping" point and snapshot your project. Upload it to CMS
on-time. This gives you a nice failsafe if you don't think you can finish
implementing everything, or you have some memory consumption issues. If you
fix it, you can submit late (up until Monday @ 3:00), and you'll likely come
out better for it. If you cannot fix it, you don't have to suffer late
penalties *and* penalties for broken code.
4. Performance matters. We care most about your Big-O running time. Make sure
all of your algorithms do fit the runtime we ask for. We also care about
wall-clock time. The graders will be instructed to wait at most a few
minutes to run the bigger test cases. These test cases should complete in
under a minute.
That being said, the bigger test cases represent a minority of the points
available. Certainly enough points to justify the extra effort spent making
them work, but not a majority of the available points.
As I said before, correctness before speed.
5. Your standard recommendation should be non-trivial. I recommend utilizing
the clustering coefficient, but I've seen excellent ideas come from students
that don't even touch the clustering coefficient.
What is not acceptable is a strategy like, "Pick a random person who chats
with many people." This is easy to do (simply find a node with high in/out
degree). It is also unacceptable to simply drop the edge weights from the
standardRecommendation algorithm. You may use the standard recommendation
algorithm (or parts of it) as a subroutine.
6. Sanity on the list. There are over 100 emails to the list each day. This
is almost too much for people to sift through, and many of the questions are
similar to questions asked previously. It's all too tempting to simply
post to the group with your question, but I ask that you spend a little time
searching around for previous answers to your question. If everyone does
this, it will be easier for people to ask unique last-minute questions close
to the deadline, and receive a timely answer.
Best of luck,
Robert
A clustering based algorithm is different, and so is perfectly
acceptable.
-Robert