𧬠2.1 κ³ μ λ ν¨ν΄μ μ°Ύλ λ¨μ μκ³ λ¦¬μ¦
2.1. ν¨ν΄μ°ΎκΈ°μ μ€μμ±
𧬠μλ¬Όνμ μ 보λ DNA μμ΄λ‘ μ μ§λκΈ° λλ¬Έμ μμ΄ λ°μ΄ν°μ ν¨ν΄ λΆμμ μ€μν¨
𧬠μμ΄ λ°μ΄ν°μ ν¨ν΄μ λΆμμ νΉμ κΈ°λ₯μ μ°κ΄λμ΄ μμ
𧬠λ¨λ°±μ§μ΄ νΉμ κΈ°λ₯μ μννλ €λ©΄ λ¨λ°±μ§μ ꡬ쑰μ νΉμ ν ν¨ν΄μ΄ νμνλ©°, κ·Έκ²μ μμνλ DNA μμ΄ ν¨ν΄μ΄ μ‘΄μ¬
𧬠λν DNA μμ΄μλ μ μ μ λ°νλμ μ‘°μ νλ κ²°ν©λΆμ λ±μ΄ κ΄λ ¨λμ΄ μκΈ°λ ν¨
2.1.1. κ³ μ λ ν¨ν΄μ μ°Ύλ λ¨μ μκ³ λ¦¬μ¦
𧬠찾μΌλ €λ ν¨ν΄μ μ²μ μμΉλ₯Ό μ°Ύκ±°λ μ°ΎμΌλ €λ ν¨ν΄μ λͺ¨λ μμΉλ₯Ό μ°Ύλ μκ³ λ¦¬μ¦
𧬠search_first_occ( ) ν¨μ μμ± : ν¨ν΄μ΄ μ²μ λνλλ μμΉλ₯Ό λ°ννκ±°λ λ°μνμ§ μμΌλ©΄ -1μ λ°νν¨
𧬠search_all_occurences( ) ν¨μ μμ± : μμ΄μμ ν¨ν΄μ΄ μΌμΉνλμ§ κ²μ¬νκ³ μμΉ λ¦¬μ€νΈλ₯Ό λ°νν¨. μμΌλ©΄ λΉ λ¦¬μ€νΈ λ°ν
𧬠test_pat_search( ) ν¨μ μμ± : μ¬μ©μκ° μ
λ ₯ν μμ΄ λ°μ΄ν°μλ μ μ©κ°λ₯
π search_first_occ( )
- i : DNA seq μ μΈλ±μ€
- j : pattern seq μ μΈλ±μ€
- DNA μμ΄κ³Ό pattern μμ΄μ 첫 μΌκΈ°κ° λ€λ₯΄λ©΄ i += 1 μ μν΄ DNA μμ΄μ νμΉΈμ© μ΄λνλ©΄μ μ½μ
- κ·Έλ¬λ€κ° 첫 μΌκΈ°κ° κ°μΌλ©΄ j = j + 1 μ μν΄ DNA([ i+j ]) μμ΄κ³Ό pattern([ j ]) μμ΄μ νμΉΈμ© μ΄λνλ©΄μ μ½μ
- λ§μ½ μ΄λ¬ν κ³Όμ μ€μ λ€λ₯Έ μΌκΈ°κ° λ°κ²¬λλ©΄ i += 1 μ μ€ννκ³ jλ λ€μ 0μΌλ‘ μ΄κΈ°ν
- μ°Ύλ pattern κ³Ό μμ ν μΌμΉνλ©΄ j == len(pattern) μ μν΄ found = True
- pattern μ΄ DNA seq μμ μ²μ λνλλ μμΉμΈ i λ₯Ό λ°νν¨
def search_first_occ(seq, pattern):
found = False
i = 0
while i < len(seq)-len(pattern) and not found:
j = 0
while j < len(pattern) and pattern[j]==seq[i+j]:
j = j + 1
if j == len(pattern):
found = True
else:
i += 1
if found: return i
else: return -1
seqDNA = "ATAGAATAGATAATAGTC"
print(search_first_occ(seqDNA, "GAAT"))
print(search_first_occ(seqDNA, "TATA"))
>> 3
-1
π search_all_occurrences( )
- i : DNA seq μ μΈλ±μ€
- j : pattern seq μ μΈλ±μ€
- DNA seq κ³Ό pattern seq μ 첫 μΌκΈ°κ° λ€λ₯΄λ©΄ forλ¬Έμ μν΄μ i += 1 μ΄ λλ©΄μ DNA μμ΄μ νμΉΈμ© μ΄λνλ©΄μ μ½μ
- 첫 μΌκΈ°κ° κ°μΌλ©΄ j = j + 1 μ μν΄ DNA ([ i+j ]) μμ΄κ³Ό pattern seq ([ j ]) μμ΄μ νμΉΈμ© μ΄λνλ©΄μ μ½μ
- κ·Έλ¬λ€κ° μμ ν μΌμΉνλ ν¨ν΄μ΄ λ°κ²¬λλ©΄ DNA seqμμ μ²μ λνλλ μμΉμΈ i λ₯Ό res 리μ€νΈμ μΆκ°
- for λ¬Έμ μν΄μ λͺ¨λ DNA μΌκΈ°μμ΄μ λν΄μ search κ° κ°λ₯ν¨
- μ΄λ κ² μμΉλ₯Ό μΆκ°ν 리μ€νΈμΈ res λ°ν
def search_all_occurrences(seq, pattern):
res = []
for i in range(len(seq)-len(pattern)+1):
j = 0
while j < len(pattern) and pattern[j]==seq[i+j]:
j = j + 1
if j == len(pattern):
res.append(i)
return res
seqDNA = "ATAGAATAGATAATAGTC"
print(search_all_occurrences(seqDNA, "AAT"))
>> [4, 11]
def test_pat_search():
seq = input("Input sequence: ")
pat = input("Input pattern: ")
print(pat, "occrs in the following positions: ")
print(search_all_occurrences(seq, pat))
test_pat_search()
>>
Input sequence: ATGGGATCGTAGTCGTACTAGCTAGCTGATGGTACTCGATAGTCTACGTAGCTAGTGGTACTGGATGGTACTCAGTAACAT
Input pattern: AT
AT occrs in the following positions:
[0, 5, 28, 38, 64, 79]
𧬠μ΄λ² ν¬μ€ν μμλ λ¨μνκ² μμ΄λ€μ νμΉΈμ© μ΄λνλ©΄μ λΉκ΅νλ μκ³ λ¦¬μ¦μ λ€λ€λ³΄μλ€. νμ§λ§ μ΄λ κ² μΌμΌμ΄ λΉκ΅νλ μκ³ λ¦¬μ¦μ λ무 λ§μ μ€νμ ν΄μΌνλ κ²½μ°κ° μκ³ , λ°μ΄ν° μμ΄ λ§μ μλͺ λ°μ΄ν°μλ μ ν©νμ§ μλ€κ³ μκ°νλ€.
𧬠λ€μ ν¬μ€ν μμλ μ’ λ ν₯μλ 보μ΄μ΄-λ¬΄μ΄ μκ³ λ¦¬μ¦μ λν΄μ λ°°μ보μ.
Leave a comment