Advertisement
4da

hw1_1_2 algs2

4da
Dec 15th, 2012
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 0.99 KB | None | 0 0
  1. #lang racket
  2.  
  3. (struct job (weight len))
  4.  
  5. (define (job> j1 j2)
  6.   (define (diff j)
  7.     (/ (job-weight j) (job-len j)))
  8.   ;; (define (diff j)
  9.   ;;   (- (job-weight j) (job-len j)))
  10.   (let ([diff-j1 (diff j1)]
  11.     [diff-j2 (diff j2)])
  12.    
  13.     (cond [(> diff-j1 diff-j2) #t]
  14.       [(< diff-j1 diff-j2) #f]
  15.       [(= diff-j1 diff-j2) (> (job-weight j1)
  16.                   (job-weight j2))])))
  17.  
  18. (define (get-weighted-summ jobs)
  19.   (define (get-sum-times)
  20.     (for/fold ([sum 0] [time 0]) ([j jobs])
  21.       (values (+ sum  (* (job-weight j) (+ time (job-len j))))
  22.           (+ time (job-len j)))))
  23.  
  24.   (let-values ([(sum times) (get-sum-times)])
  25.     sum))
  26.  
  27. (define (schedule-greedy jobs)
  28.   (let* ([sorted-jobs (sort jobs job>)])
  29.     (get-weighted-summ sorted-jobs)))
  30.  
  31. (define (read-jobs jobs-num in)
  32.   (for/list ([j jobs-num])
  33.     (job (read in) (read in))))
  34.  
  35. (define (run)
  36.   (let* ([in (open-input-file "jobs.txt")]
  37.      [jobs-num (read in)]
  38.      [jobs (read-jobs jobs-num in)])
  39.     (schedule-greedy jobs)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement