Advertisement
Guest User

Untitled

a guest
Mar 8th, 2014
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Let Tickets be a random access list
  2. Let Rating(i) be the user rating of the ith song
  3.  
  4. Initialization:
  5. Tickets[0] = 0
  6. For (i=1 to SongNumber-1)
  7. Tickets[i] = (L[i-1] + Rating(i-1))
  8.  
  9. RatingSum = Tickets[SongNumber-1] + Rating(SongNumber-1)
  10. TicketSum = RatingSum
  11.  
  12.  
  13.  
  14. Select Next Song:
  15. rnd = Random from 0 to TicketSum-1
  16.  
  17. // Use binary search to find the next song
  18. left = 0
  19. right = SongNumber-1
  20. While (left < right) Do
  21. i = left + ((left + right) / 2)
  22. If (Tickets[i] > rnd)
  23. right = i-1
  24. Else
  25. left = i
  26.  
  27. If (left == right)
  28. next_song = i
  29.  
  30. // Update the ticket sum
  31. If (next_song == SongNumber-1)
  32. TicketSum = TicketSum + TicketSum - Tickets[next_song]
  33. Else
  34. TicketSum = TicketSum + Tickets[next_song+1] - Tickets[next_song]
  35. TicketSum = TicketSum + RatingSum
  36.  
  37. // Update the individual tickets
  38. For (i=1 to next_song)
  39. Tickets[i] = Min(Tickets[i] + Rating(i-1) - Tickets[i-1] , MaxTickets) + Tickets[i-1]
  40. If (next_song < SongNumber-1)
  41. Tickets[next_song+1] = Tickets[next_song]
  42. For (i=next_song+2 to SongNumber-1)
  43. Tickets[i] = Min(Tickets[i] + Rating(i-1) - Tickets[i-1] , MaxTickets) + Tickets[i-1]
  44.  
  45. Return next_song
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement