νƒœκ·Έ 보관물: arrays

arrays

n으둜 λ‚˜λˆŒ μˆ˜μžˆλŠ” μ΅œλŒ€ ν•© μš”μ†Œλ₯Ό κ³ μœ ν•˜κ²Œ ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€). μΆ”μ²œ O

StackOverflow μ—μ„œμ΄ 질문 을 ν–ˆμ§€λ§Œ 여기에 더 μ μ ˆν•œ μž₯μ†Œκ°€ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

이것은 μ•Œκ³ λ¦¬μ¦˜ μ†Œκ°œ κ³Όμ • μ—μ„œ λ°œμƒν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€ .

μ–‘μ˜ μ •μˆ˜ κ°€ n 인 λ°°μ—΄ κ°€ μžˆμŠ΅λ‹ˆλ‹€ (배열을 μ •λ ¬ν•˜κ±°λ‚˜ μš”μ†Œλ₯Ό κ³ μœ ν•˜κ²Œ ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€). μΆ”μ²œ O ( N ) 둜 λ‚˜λˆ„μ–΄ μ†Œμžμ˜ κ°€μž₯ 큰 합을 μ°ΎλŠ” μ•Œκ³ λ¦¬μ¦˜ N을 .

a

n

O(n)

n

예 : . 닡은 56μž…λ‹ˆλ‹€ (μš”μ†Œ 6 , 13 , 4 , 8 , 25 포함 )

a=[6,1,13,4,9,8,25],n=7

56

6,13,4,8,25

동적 ν”„λ‘œκ·Έλž˜λ°μ„ μ‚¬μš©ν•˜κ³  λ‚˜λ¨Έμ§€ 0 , 1 , 2 , 와 ν•¨κ»˜ κ°€μž₯ 큰 합계λ₯Ό μ €μž₯ν•˜μ—¬ μ—μ„œ 비ꡐ적 μ‰½κ²Œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€ . . . , n – 1 .

O(n2)

0,1,2,...,nβˆ’1

λ˜ν•œ 연속 된 μš”μ†Œ μ‹œν€€μŠ€μ—μ£Όμ˜λ₯Ό μ œν•œν•˜λ©΄ λΆ€λΆ„ ν•© λͺ¨λ“ˆλ‘œ n 을 μ €μž₯ ν•˜μ—¬ μ‹œκ°„ 에 졜적의 μ‹œν€€μŠ€λ₯Ό μ‰½κ²Œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€ . let S [ i ] = a [ 0 ] + a [ 1 ] + β‹― + a [ i ] , 각 λ‚˜λ¨Έμ§€ r 에 λŒ€ν•΄ S [ j ] ≑ r이 λ˜λ„λ‘ κ°€μž₯ 큰 인덱슀 jλ₯Ό κΈ°μ–΅ν•˜μ‹­μ‹œμ˜€

O(n)

n

S[i]=a[0]+a[1]+β‹―+a[i]

r

j

, λ‹€μŒμ˜ 각 I κ³ λ €ν•΄μ•Ό S [ J ] – Sκ°€ [ I ] μ—¬κΈ°μ„œ, JλŠ” 에 λŒ€μ‘ν•˜λŠ” 인덱슀이고 , R = S [ I ] 개쑰 N .

S[j]≑r(modn)

i

S[j]βˆ’S[i]

j

r=S[i]modn

κ·ΈλŸ¬λ‚˜ 일반적인 κ²½μš°μ— μ‹œκ°„ μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆκΉŒ? λͺ¨λ“  μ œμ•ˆμ„ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€! λ‚˜λŠ” 이것이 μ„ ν˜• λŒ€μˆ˜λ₯Ό λ‹€λ£¨λŠ” κ²ƒμœΌλ‘œ μƒκ°ν•˜μ§€λ§Œ μ •ν™•νžˆ 무엇인지 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

O(n)

λ˜λŠ” μ‹œκ°„ 내에이 μž‘μ—…μ„ μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

O(nlog⁑n)


λ‹΅λ³€

λ‹€μŒμ€ λͺ‡ 가지 μž„μ˜μ˜ μ•„μ΄λ””μ–΄μž…λ‹ˆλ‹€.

  • 동적 ν”„λ‘œκ·Έλž˜λ° μ•Œκ³ λ¦¬μ¦˜μ„ 뒀집어 κ°€μž₯ 큰 합계 λŒ€μ‹  κ°€μž₯ μž‘μ€ 합계λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. 당신은 ν•˜λ‚˜μ˜ 합동에 0 λŒ€μ‹ μ—, 전체 λ°°μ—΄μ˜ λ‚˜λ¨Έμ§€μ— ν•©ν•œ 합을 μ°ΎλŠ”λ‹€. μš”μ†Œλ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ²˜λ¦¬ν•˜λ©΄ 전체 배열을 μ²˜λ¦¬ν•˜κΈ° 전에 동적 μ•Œκ³ λ¦¬μ¦˜μ΄ μ’…λ£Œ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

    k 개의 μš”μ†Œλ₯Ό μ²˜λ¦¬ν•˜λ©΄ λΉ„μš©μ€ μž…λ‹ˆλ‹€. μžˆλ‹€ μ—†λ‹€ 의 ν•˜ν•œ Ξ© ( N 둜그 N ) μš°λ¦¬λŠ” λͺ¨λ“  μš”μ†Œλ₯Ό μ •λ ¬ ν•  ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ—μ΄ μ•Œκ³ λ¦¬μ¦˜μ—. k 개의 κ°€μž₯ μž‘μ€ μš”μ†Œ λ₯Ό μ–»λŠ” 데 O ( n log k ) μ‹œκ°„ 만 κ±Έλ¦½λ‹ˆλ‹€ .

    O(nk)

    k

    Ω(nlog⁑n)

    O(nlog⁑k)

    k
  • κ°€μž₯ 큰 크기의 집합 λŒ€μ‹  큰 크기의 집합을 염두에두면 λΉ λ₯Έ 푸리에 λ³€ν™˜ 기반 닀항식 κ³±μ…ˆμ„ μ‚¬μš©ν•˜μ—¬ μ‹œκ°„. 도메인 λ²”μœ„κ°€ μ œν•œ 될 λ•Œ 3SUM μ—μ„œ μˆ˜ν–‰ ν•œ 것과 μœ μ‚¬ν•©λ‹ˆλ‹€ . (μ°Έκ³  : μ‚¬μš©μ€ λ‹€λ₯Έ 당신이 얻을 것이닀, 이진 검색을 ν•  제곱 반볡 O ( N K ( 둜그 N ) ( 둜그 둜그 N ) ) K

    O(n(log⁑n)2(log⁑log⁑n))

    O(nk(log⁑n)(log⁑log⁑n))

    k

    μƒλž΅ 된 μš”μ†Œμ˜ μˆ˜μž…λ‹ˆλ‹€.)

  • λ•Œ 볡합이며, 거의 λͺ¨λ“  λ‚˜λ¨Έμ§€ 쀑 ν•˜λ‚˜μ˜ λ°°μˆ˜μ΄λ‹€ N 의 μš”μΈ μƒλ‹Ήν•œ μ‹œκ°„μ΄ κ·Έ μš”μ†Œμ˜ λ°°μˆ˜κ°€ μ•„λ‹Œ λ‚˜λ¨Έμ§€μ— μ΄ˆμ μ„ 맞좀으둜써 μ €μž₯ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

    n

    n
  • μž”μ°¨ rκ°€ 맀우 ν”ν•˜κ±°λ‚˜ μž”μž¬κ°€ κ±°μ˜μ—†λŠ” 경우 β€˜μ—¬κΈ°μ—μ„œ μ‹œμž‘ν•˜λ©΄ λ‹€μŒ μ—΄λ¦° μŠ¬λ‘―μ„ μΆ”μ ν•˜κ³  r정보λ₯Ό 계속 μ‚¬μš©ν•˜μ—¬ 정보λ₯Ό 계속 μœ μ§€ β€˜ν•˜λ©΄ λ§Žμ€ 점프 μŠ€μΊ” λŒ€ μ˜€ν”ˆ μŠ€νŒŸμ„ μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‹œκ°.

  • 도달 κ°€λŠ₯μ„± 만 μΆ”μ ν•˜κ³  ν”Œλ¦½ 된 동적 μ•Œκ³ λ¦¬μ¦˜μ—μ„œ λΉ„νŠΈ 마슀크λ₯Ό μ‚¬μš©ν•œ λ‹€μŒ λŒ€μƒ λ‚˜λ¨Έμ§€μ— λ„λ‹¬ν•˜λ©΄ μ—­ 좔적 ν•˜μ—¬ 둜그 μš”μ†Œ λ₯Ό 면도 ν•  수 μžˆμŠ΅λ‹ˆλ‹€ .

  • 동적 ν”„λ‘œκ·Έλž˜λ° μ•Œκ³ λ¦¬μ¦˜μ€ λ³‘λ ¬λ‘œ 싀행될 수 μžˆμŠ΅λ‹ˆλ‹€. 각 버퍼 μŠ¬λ‘―μ— λŒ€ν•œ ν”„λ‘œμ„Έμ„œλ₯Ό μ‚¬μš©ν•˜λ©΄ κΉŒμ§€ λ‚΄λ €κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€ . λ˜λŠ” O ( n 2 ) 폭을 μ‚¬μš©ν•˜κ³  반볡 집계 λŒ€μ‹  집계λ₯Ό λΆ„ν•  및 μ •λ³΅ν•¨μœΌλ‘œμ¨ 회둜 깊이 λΉ„μš©μ„ O ( log 2 n ) κΉŒμ§€ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€ .

    O(n)

    O(n2)

    O(log2⁑n)
  • (메타) λ‚˜λŠ” 당신이 κ²ͺ은 λ¬Έμ œκ°€ 연속적인 ν•© 에 κ΄€ν•œ 것이라고 κ°•λ ₯히 μ˜μ‹¬ν•©λ‹ˆλ‹€ . μ‹€μ œ λ¬Έμ œμ™€ μ—°κ²°λ˜μ–΄ 있으면 μ‰½κ²Œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄μ΄ λ¬Έμ œκ°€ β€œμ•Œκ³ λ¦¬μ¦˜ μ†Œκ°œβ€λΌλŠ” κ³Όμ •μ—μ„œ λ°°μ • 된 것을 κ°μ•ˆν•  λ•Œμ΄ λ¬Έμ œκ°€ μ–Όλ§ˆλ‚˜ μ–΄λ €μš΄μ§€ 맀우 λ†€λžμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ–΄μ©Œλ©΄ 당신은 그것을 μ‚¬μ†Œν•˜κ²Œ λ§Œλ“œλŠ” νŠΈλ¦­μ„ λ‹€λ£¨μ—ˆμŠ΅λ‹ˆλ‹€.


λ‹΅λ³€

λ‚΄κ°€ μ œμ•ˆν•œ μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

n의 배수 인 summand 만 μΆ”κ°€ν•˜λ©΄ 합은 n으둜 λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹œμž‘ν•˜κΈ° 전에 intλ₯Ό ν‚€λ‘œ, 인덱슀 λͺ©λ‘μ„ κ°’μœΌλ‘œ μ‚¬μš©ν•˜μ—¬ ν•΄μ‹œ 맡을 μž‘μ„±ν•˜μ‹­μ‹œμ˜€. λ˜ν•œ 색인이 포함 된 κ²°κ³Ό λͺ©λ‘μ„ λ§Œλ“­λ‹ˆλ‹€.

그런 λ‹€μŒ 배열을 λ°˜λ³΅ν•˜κ³  mod n이 0 인 λͺ¨λ“  인덱슀λ₯Ό κ²°κ³Ό λͺ©λ‘μ— μΆ”κ°€ν•©λ‹ˆλ‹€. λ‹€λ₯Έ λͺ¨λ“  색인에 λŒ€ν•΄ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€.

이 인덱슀의 κ°’ mod n을 nμ—μ„œ λΊλ‹ˆλ‹€. 이 κ²°κ³ΌλŠ” ν•„μš”ν•œ 값을 가진 μš”μ†Œμ˜ 인덱슀λ₯Ό μ €μž₯ν•˜λŠ” ν•΄μ‹œ 맡의 ν•΅μ‹¬μž…λ‹ˆλ‹€. 이제이 색인을 ν•΄μ‹œ 맡의 λͺ©λ‘μ— μΆ”κ°€ν•˜κ³  계속 μ§„ν–‰ν•˜μ‹­μ‹œμ˜€.

배열을 반볡 ν•œ ν›„ 좜λ ₯을 κ³„μ‚°ν•©λ‹ˆλ‹€. μΈλ±μŠ€κ°€ κ°€λ¦¬ν‚€λŠ” 값에 따라 ν•΄μ‹œ 맡의 각 λͺ©λ‘μ„ μ •λ ¬ν•˜λ©΄λ©λ‹ˆλ‹€. 이제 ν•΄μ‹œ 맡의 λͺ¨λ“  쌍이 nκΉŒμ§€ ν•©μ‚°λ˜λŠ” 것을 κ³ λ €ν•˜μ‹­μ‹œμ˜€. λ”°λΌμ„œ n = 7이면 ν•΄μ‹œ λ§΅μ—μ„œ 3κ³Ό 4λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€. λ‘˜ 닀에 ν•­λͺ©μ΄ 있으면 두 개의 κ°€μž₯ 큰 값을 κ°€μ Έ μ™€μ„œ λͺ©λ‘μ—μ„œ μ œκ±°ν•˜κ³  κ²°κ³Ό λͺ©λ‘μ— μΆ”κ°€ν•©λ‹ˆλ‹€.

λ§ˆμ§€λ§‰ ꢌμž₯ 사항 : μ—¬μ „νžˆ μ•Œκ³ λ¦¬μ¦˜μ„ ν…ŒμŠ€νŠΈν•˜μ§€ μ•Šμ•˜κ³  무차별 κ°•μ œ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•˜μ‹­μ‹œμ˜€.


λ‹΅λ³€

이 DP 방법을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€ ( /programming/4487438/maximum-sum-of-non-consecutive-elements?rq=1 ) :

λ°°μ—΄ A [0..n]이 주어지면 인덱슀 0..iλ₯Ό κ°–λŠ” μš”μ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬ M (i)을 졜적의 μ†”λ£¨μ…˜μœΌλ‘œ λ§Œλ“œμ‹­μ‹œμ˜€. 그런 λ‹€μŒ M (-1) = 0 (λ°˜λ³΅μ— μ‚¬μš©λ¨), M (0) = A [0] 및 M (i) = max (M (i-1), M (i-2) + A [i ])에 λŒ€ν•΄ i = 1, …, nμž…λ‹ˆλ‹€. M (n)은 μš°λ¦¬κ°€ μ›ν•˜λŠ” μ†”λ£¨μ…˜μž…λ‹ˆλ‹€. 이것은 O (n) μž…λ‹ˆλ‹€. λ‹€λ₯Έ 배열을 μ‚¬μš©ν•˜μ—¬ 각 ν•˜μœ„ λ¬Έμ œμ— λŒ€ν•΄ μ„ νƒν•œ ν•­λͺ©μ„ μ €μž₯ν•  수 μžˆμœΌλ―€λ‘œ μ„ νƒν•œ μ‹€μ œ μš”μ†Œλ₯Ό 볡ꡬ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μž¬κ·€λ₯Ό M (i) = max (M (i-1), M (i-2) + A [i])둜 λ³€κ²½ν•˜μ—¬ N으둜 λ‚˜λˆŒ μˆ˜μžˆλŠ” κ²½μš°μ—λ§Œ μ €μž₯ν•©λ‹ˆλ‹€.


λ‹΅λ³€