Petite Chez Scheme: Har en zip og unzip metod som skal gøres hurtiger.
Okay måske et lidt underligt programmerings sprog, men jeg kan faktisk godt lide det, til simpelt arbejde.
Men nu er jeg sku kommet i problemer, jeg har de her metoder:
(define zip
(lambda (a b)
(if (and (list? a) (list? b))
(if (equal? (length a) (length b))
(if(zero? (length a)) '()
(cons (cons (car a) (car b)) (zip (cdr a) (cdr b))))))))
(Define unzip
(lambda (a) ;;; The reason for only 1 lambda need is because we are splliting one list of pairs not two
(if (list? a)
(if (null? a) '(() ()) ;;; If ther exist no a then return to list, both containg the empty list
(list (cons (caar a) (car (unzip (cdr a))))
(cons (cdar a) (cadr (unzip (cdr a)))))))))
Begge metoder kører i O(n^3), men så vidt jeg kan regne ud skulle det kunne gøres i O(n) tid, men jeg ved ikke helt hvordan det skal kunne gøres.
Dog har jeg en ide om at det skal kunne gøres med en letrec metode, men jeg er ikke helt klar over hvordan det skal gøres, for det er jeg stadig ved at lærer.
Så er der nogen som kan hjælpe med det ?
- Log in to post comments
Kommentarer