sicp ch2 3 - andstudy/forge GitHub Wiki

SICP/2.3 κΈ€μžλ°μ΄ν„°

λ°œν‘œλ‚΄μš©

  • SICP/2.3 κΈ€μžλ°μ΄ν„°
    • 2.3.1 λ”°μ˜΄ν‘œ μ—°μ‚°
    • 2.3.2 μ—°μŠ΅: κΈ€μž μ‹μ˜ λ―ΈλΆ„
    • 2.3.3 μ—°μŠ΅ : 집합을 λ‚˜νƒ€λ‚΄λŠ” 방법
    • 2.3.4 μ—°μŠ΅ : ν—ˆν”„λ§Œ 인코딩 λ‚˜λ¬΄ (각자)

2.3.1 λ”°μ˜΄ν‘œ μ—°μ‚°

  • lisp은 문자λ₯Ό λ°μ΄ν„°λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

      (define a 1)
      (define b 2)
      (list a b)
      >> (1 2)
      (list `a `b)
      >> (a b)
      (list `a b)
      >> (a 2)
      (car `(a b c))
      >> a
      (cdr `(a b c))
      >> (b c)
    
  • p186 memq μ„€λͺ…

  • p187(2.53) μ„€λͺ…

  • p187(2.54) μ„€λͺ… (2.3.2μ—μ„œ μ‚¬μš©λ˜λŠ” ν”„λ‘œμ‹œμ €)

2.3.2 μ—°μŠ΅ κΈ€μž μ‹μ˜ λ―ΈλΆ„

  • κΈ€μžλ‘œ 이루어진 λŒ€μˆ˜μ‹μ˜ λ―ΈλΆ„ ν”„λ‘œμ‹œμ €λ₯Ό 섀계해 보자.

  • λŒ€μˆ˜μ‹κ³Ό λ³€μˆ˜λ₯Ό 인자둜 λ°›μ•„μ„œ κ·Έ λ³€μˆ˜λ‘œ λ―ΈλΆ„ν•œ λŒ€μˆ˜μ‹μ„ λ‚΄λ†“λŠ”λ‹€.

    • =>μˆ˜μ‹κ³Ό λ³€μˆ˜. 2개의 인자λ₯Ό λ°›λŠ” λ―ΈλΆ„ ν”„λ‘œμ‹œμ €λ₯Ό λ§Œλ“€μ–΄λ³΄μž.
    • μž…λ ₯:ax^2+bx+c, x
    • 좜λ ₯:2ax+b
  • 2.2.1μ ˆμ—μ„œ μ‚¬μš©ν–ˆλ˜ 유리수 μ‹œμŠ€ν…œ κ°œλ°œν•  λ•Œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ β€œλ°μ΄ν„° μš”μ•½β€μ„ μ΄μš©ν•˜μ—¬ μš°μ„  μ•Œλ§žκ²Œ 문제λ₯Ό κ°„μΆ”λ¦¬λŠ” 것에 μ΄ˆμ μ„ λ‘‘λ‹ˆλ‹€. =>문제 간좔리기

  • λ―ΈλΆ„ 곡식을 μ•Œμ•„λ³΄μž

    • dc/dx = 0

    • dx/dx = 1

    • d(u+v)/dx = du/dx+dv/dx ν•©μ˜ 곡식

    • d(uv)/dx = u(dv/dx)+v(du/dx)곱의 곡식

    • f(x)=c =>f’(x) = 0 c=μƒμˆ˜

    • y=f(x) =>y’ = f’(x) = 1

    • y=f(x)+g(x) =>y’ = f’(x)+g’(x) ν•©μ˜κ³΅μ‹

    • y=f(x)g(x) =>y’ = f’(x)g(x)+f(x)g’(x) κ³±μ˜κ³΅μ‹

    • ν•„μš”ν•œ κΈ°λŠ₯을 μ•Œμ•„ 보자

    • 미뢄곡식(κ·œμΉ™)을 μ΄μš©ν•˜μ—¬ 식(μž…λ ₯)을 λ„£μ–΄ λ―ΈλΆ„λœ 식(좜λ ₯)을 κ΅¬ν•˜λŠ” ν”„λ‘œμ‹œμ €λ‘œ ν‘œν˜„ν•˜λ €λ©΄ 식이 λ§μ…ˆ 식인지 κ³±μ…ˆ 식인지 μƒμˆ˜μΈμ§€ λ³€μˆ˜μΈμ§€ μ•Œμ•„ λ³΄λŠ” κΈ°λŠ₯(μ–΄λ–€ κ·œμΉ™μ„ 적용 μ‹œν‚¬μ§€)이 ν•„μš”ν•˜κ³ , 또 λ§μ…ˆ 식이라면 λ”ν•˜μž„ μˆ˜μ™€ 덧수 κ³±μ…ˆμ‹μ΄λΌλ©΄ κ³±ν•˜μž„ μˆ˜μ™€ κ³± 수λ₯Ό λ½‘λŠ” κΈ°λŠ₯(κ·œμΉ™μ„ μ μš©μ‹œμΌœ λ‚˜μ˜¨ λ―ΈλΆ„ μˆ˜μ‹μ„ μ–΄λ–»κ²Œ ν‘œν˜„ ν• μ§€)이 ν•„μš”ν•©λ‹ˆλ‹€.

    • κΈ°λŠ₯을 κ°„μΆ”λ € 보자.

      • λ―ΈλΆ„μ‹μ˜ λ³€μˆ˜λŠ” κΈ€μžλ‘œ λ‚˜νƒ€λ‚Έλ‹€.
      • μ–΄λ–€ 값이 κΈ°ν˜ΈμΈμ§€ μ•„λ‹Œμ§€ μ•Œμ•„λ³΄λŠ” κΈ°λ³Έ ν”„λ‘œμ‹œμ €λŠ” symbol?이닀.
      • λ³€μˆ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 두 κΈ°νšŒκ°€ eq?ν•˜λ‹€λ©΄, 두 λ³€μˆ˜λŠ” κ°™λ‹€.
      • λ§μ…ˆ 식과 κ³±μ…ˆ 식은 리슀트λ₯Ό μ¨μ„œ μ§œλ§žμΆ˜λ‹€.
      • λ§μ…ˆ 식은 첫 번째 μ›μ†Œκ°€ +기호둜 μ‹œμž‘λ˜λŠ” λ¦¬μŠ€νŠΈμ΄λ‹€.
      • λ”ν•˜μž„μˆ˜λŠ” 리슀트의 2번째 μ›μ†Œμ΄λ‹€.
      • λ§μˆ˜λŠ” λ§μ…ˆ 리슀트이 3번째 μ›μ†Œμ΄λ‹€.
      • κ³±μ…ˆ 식은 첫 번째 μ›μ†Œκ°€ *기호둜 μ‹œμž‘λ˜λŠ” λ¦¬μŠ€νŠΈμ΄λ‹€.
      • κ³±ν•˜μž„μˆ˜λŠ” κ³±μ…ˆ 리슀트의 2번째 μ›μ†Œμ΄λ‹€.
      • κ³±μˆ˜λŠ” κ³±μ…ˆ 리슀트의 3번째 μ›μ†Œμ΄λ‹€.
  • p190 deriv μ„€λͺ…

  • λ°œμ „λœ deiv ν”„λ‘œμ‹œμ €λ₯Ό λ§Œλ“€μž

    • => derive ν”„λ‘œμ‹œμ €λ₯Ό μ΄μš©ν•˜μ—¬ x+3을 λ―ΈλΆ„ν•˜λ©΄ (+ 1 0)을 좜λ ₯ν•œλ‹€.

    • => 닡은 λ§žμ§€λ§Œ, μ•Œμ•„ 보기가 νž˜λ“œλ―€λ‘œ 쒀더 μ•Œμ•„λ³΄κΈ° μ‰½κ²Œ 좜λ ₯λ˜λ„λ‘ μˆ˜μ • ν•΄ 보자.

    • => derivν”„λ‘œμ‹œμ €λŠ” κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κ³  make-sumκ³Ό make-product ν”„λ‘œμ‹œμ €λ₯Ό μˆ˜μ •ν•˜λ„λ‘ ν•œλ‹€.

    • λ§μ…ˆμ˜ 경우

      • λ”ν•˜μž„ 수 ν˜Ήμ€ λ§μˆ˜κ°€ 0인 경우 없어져도 λ¬΄λ°©ν•˜λ‹€.
      • λ”ν•˜μž„ μˆ˜μ™€ λ§μˆ˜κ°€ λ‘˜ λ‹€ 숫자일 경우 λ§μ…ˆ 연산을 μ§„ν–‰ν•œλ‹€.
      • κ·Έμ™Έμ˜ κ²½μš°μ—” μ˜ˆμ „μ²˜λŸΌ 좜λ ₯μ‹œν‚¨λ‹€.
    • κ³±μ…ˆμ˜ 경우

      • κ³±ν•˜μž„ 수 ν˜Ήμ€ κ³±μˆ˜κ°€ 0인경우 ν•΄λ‹Ή 항이 μ—†μ–΄μ§„λ‹€.
      • κ³±ν•˜μž„ 수 ν˜Ήμ€ κ³±μˆ˜κ°€ 1인 경우 λ‚˜λ¨Έμ§€ν•­λ§Œ 좜λ ₯ν•œλ‹€.(x*1=x)
      • κ³±ν•˜μž„ μˆ˜μ™€ κ³±μˆ˜κ°€ λͺ¨λ‘ 숫자일 경우 κ³±μ…ˆ 연산을 μ§„ν–‰ν•œλ‹€.
      • κ·Έμ™Έμ˜ κ²½μš°μ—” μ˜ˆμ „μ²˜λŸΌ 좜λ ₯μ‹œν‚¨λ‹€.
  • p194 advanced deriv μ„€λͺ…

  • p194(2.56) μ„€λͺ…

  • p195(2.57) μ„€λͺ…(2λ§ˆλ”” 이상 μ—°μ‚° κ°€λŠ₯)

2.3.3 μ—°μŠ΅ : 집합을 λ‚˜νƒ€λ‚΄λŠ” 방법

  • μ•Œκ³ λ¦¬μ¦˜μ˜ λ³΅μž‘λ„μ— κ΄€λ ¨λœ λ‚΄μš©μ„ 집합을 ν†΅ν•΄μ„œ μ‚΄νŽ΄λ³Έ 챕터이닀.

  • μ°¨λ‘€ μ—†λŠ” 리슀트둜 ν‘œν˜„ν•œ μ§‘ν•©(unordered list)

  • μ°¨λ‘€ λ§€κΈ΄ 리슀트둜 ν‘œν˜„ν•œ μ§‘ν•©(ordered list)

  • 두 갈래 λ‚˜λ¬΄λ‘œ ν‘œν˜„ν•œ μ§‘ν•©(binary tree)

    • μ•„λž˜μ™€ 같은 집합이 쑴재 ν•  λ•Œ 두 μ§‘ν•©μ˜ ꡐ집합을 ꡬ해 보자.

    • 리슀트1= 4 2 1 9

    • 리슀트2= 6 8 2 4

    • unordered list의 경우

    • 총 16번의 비ꡐ 연산이 ν•„μš” O(n^2)

  • p197(2.59) μ„€λͺ…

    • orderde list의 경우

    • 리슀트1= 1 2 3 9

    • 리슀트2= 2 4 6 8

    • 1-2,2-2,3-2,3-4,9-2,9-4,9-6,9-8

    • 총 8번의 비ꡐ 연산이 ν•„μš” O(n)

    • 1|2,2|2,3|4,9|4,9|6,9|8

    • 2|4,3|4,9|6,0|6,0|8

    • 3|6,9|6,0|8,0|8,

    • 9|8,0|8,

    • 총 6번의 비ꡐ 연산이 ν•„μš” O(n/2) = O(n)

  • p200 μ„€λͺ…

    • binary tree의 경우
    • μ„€λͺ… Olog(n)
  • p201(2.61)μ„€λͺ…

    • μ§‘ν•©μ—μ„œ 정보 μ°Ύμ•„λ‚΄κΈ°
    • unordered list 같은 λ‹¨μˆœν•œ λ°©λ²•μœΌλ‘œ 빨리 μž‘μ—…ν•œ ν›„, 점차 κ°œμ„ ν•΄ λ‚˜κ°„λ‹€.