algorithm 튜토리얼
알고리즘 시작하기
수색…
비고
알고리즘 소개
알고리즘은 컴퓨터 과학 및 소프트웨어 공학에 편재되어 있습니다. 적절한 알고리즘 및 데이터 구조를 선택하면 비용 및 시간면에서 프로그램 효율성이 향상됩니다.
알고리즘이란 무엇입니까? 비공식적으로 알고리즘은 특정 작업을 수행하는 절차입니다. 특히, 알고리즘은 잘 정의 된 계산 절차로, 값 (또는 값 집합)을 입력으로 사용 하고 출력 으로 값 또는 값 집합을 생성 합니다. 따라서 알고리즘은 입력을 출력으로 변환하는 일련의 계산 단계입니다. Cormen et. al. 명시 적으로 알고리즘이 반드시 입력을 요구하지 않는다고 언급하지는 않습니다. [Cormen : 2001 : IA : 580470]
공식적으로 알고리즘은 5 가지 특징을 만족해야합니다 : [Knuth : 1997 : ACP : 260999]
- 정교함 . 알고리즘은 유한 단계 수 후에 항상 종료되어야합니다.
- 확실성 . 알고리즘의 각 단계는 정확하게 정의되어야합니다. 수행 할 작업을 엄격하게 지정해야합니다. [Cormen : 2001 : IA : 580470]이 용어는 "잘 정의 된"용어입니다.
- 입력 . 알고리즘에는 0 개 이상의 입력이 있습니다. 알고리즘은 시작하기 전에 알고리즘에 주어 지거나 실행될 때 동적으로 주어진 양입니다.
- 출력 . 알고리즘에는 하나 이상의 출력이 있습니다. 이것들은 투입물과 특정한 관계가있는 양이다. 동일한 입력을 반복해서 입력하면 알고리즘은 동일한 출력을 생성합니다.
- 효과 . 알고리즘 또한 일반적으로 효과적 일 것으로 기대됩니다. 그것의 작업은 연필과 종이를 사용하는 사람이 원칙적으로 그리고 유한 길이로 정확하게 수행 할 수 있도록 충분히 기본이되어야합니다.
유한성이 결여되지만 알고리즘의 다른 모든 특성을 만족시키는 절차는 계산 방법 이라고 할 수 있습니다. [크 누스 : 1997 : ACP : 260999]
샘플 알고리즘 문제
알고리즘상의 문제점은 이들 인스턴스 중 하나에서 실행 한 후 작업해야하는 전체 인스턴스 세트와 그 인스턴스 의 출력 세트를 설명함으로써 지정됩니다. 문제와 사례의 구분은 근본적입니다. 정렬 로 알려진 알고리즘 문제 는 다음과 같이 정의됩니다. [Skiena : 2008 : ADM : 1410219]
- 문제 : 정렬하기
- 입력 : n 개의 키 시퀀스,
a_1, a_2, ..., a_n
. - 출력 :
a'_1 <= a'_2 <= ... <= a'_{n-1} <= a'_n
입력 순서의 재정렬
정렬의 인스턴스 는 { Haskell, Emacs }
또는 { 154, 245, 1337 }
과 같은 일련의 숫자와 같은 문자열 배열 일 수 있습니다.
Swift에서 간단한 Fizz 버즈 알고리즘 시작하기
Swift에서 프로그래밍을 처음하는 사람들과 Python이나 Java와 같은 다른 프로그래밍 기반에서 오는 사람들에게이 기사는 상당히 도움이 될 것입니다. 이 글에서는 신속한 알고리즘 구현을위한 간단한 솔루션에 대해 논의 할 것입니다.
피즈 버즈
Fizz Buzz, FizzBuzz 또는 Fizz-Buzz로 작성된 Fizz 버즈를 보았을 수 있습니다. 그들은 모두 같은 것을 말합니다. 그 "사물"이 오늘 토론의 주요 주제입니다. 첫째, FizzBuzz는 무엇입니까?
이것은 취업 인터뷰에서 흔히 볼 수있는 질문입니다.
1에서 10까지의 일련 번호를 상상해보십시오.
1 2 3 4 5 6 7 8 9 10
Fizz와 Buzz는 각각 3과 5의 배수 인 임의의 숫자를 나타냅니다. 즉, 숫자가 3으로 나눌 수있는 경우 fizz로 대체됩니다. 숫자가 5로 나눌 수 있으면 버즈로 대체됩니다. 숫자가 동시에 3과 5의 배수이면 숫자가 "fizz buzz"로 바뀝니다. 본질적으로 유명한 어린이 게임 인 "fizz buzz"를 에뮬레이트합니다.
이 문제를 해결하려면 Xcode를 열어 새로운 놀이터를 만들고 아래와 같이 배열을 초기화하십시오 :
// for example
let number = [1,2,3,4,5]
// here 3 is fizz and 5 is buzz
모든 fizz 및 buzz를 찾으려면 배열을 반복하고 어떤 숫자가 fizz이고 어떤 것이 뜬 소리인지 확인해야합니다. 이렇게하려면 for 루프를 만들어 초기화 한 배열을 반복합니다.
for num in number {
// Body and calculation goes here
}
이 후 간단히 ie - %의 if else 조건과 모듈 연산자를 사용하여 fizz와 buzz를 찾습니다.
for num in number {
if num % 3 == 0 {
print("\(num) fizz")
} else {
print(num)
}
}
큰! 출력을 보려면 Xcode 놀이터의 디버그 콘솔로 이동하십시오. 배열에 "fizzes"가 정렬되어 있음을 알 수 있습니다.
버즈 파트의 경우 동일한 기술을 사용합니다. 기사를 스크롤하기 전에 시도해 보도록하겠습니다. 일단이 작업을 마치면이 기사와 비교하여 결과를 확인할 수 있습니다.
for num in number {
if num % 3 == 0 {
print("\(num) fizz")
} else if num % 5 == 0 {
print("\(num) buzz")
} else {
print(num)
}
}
출력을 확인하십시오!
그것은 오히려 똑 바른 앞으로 - 당신은 3에 의하여 수를 나눈, fizz 및 5에 의하여 수를 나눈, 잡음. 이제 배열의 숫자를 늘리십시오.
let number = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
"fizz buzz"의 개념을 입증하기 위해 1-10에서 1-15 사이의 숫자 범위를 늘 렸습니다. 15는 3과 5의 배수이므로 숫자는 "fizz buzz"로 바꿔야합니다. 직접 시도하고 대답을 확인하십시오!
해결책은 다음과 같습니다.
for num in number {
if num % 3 == 0 && num % 5 == 0 {
print("\(num) fizz buzz")
} else if num % 3 == 0 {
print("\(num) fizz")
} else if num % 5 == 0 {
print("\(num) buzz")
} else {
print(num)
}
}
기다려 ... 그것은 끝났어! 알고리즘의 목적은 런타임을 올바르게 사용자 정의하는 것입니다. 범위가 1-15에서 1-100으로 증가한다고 상상해보십시오. 컴파일러는 각 숫자를 확인하여 3 또는 5로 나눌 수 있는지 여부를 확인합니다. 숫자가 3과 5로 나눌 수 있는지 다시 확인합니다. 코드는 기본적으로 배열의 각 숫자를 통해 실행해야합니다 두 번 - 먼저 숫자를 3 씩 실행 한 다음 5 씩 실행해야합니다. 프로세스 속도를 높이려면 숫자를 직접 15로 나누도록 코드에 지시하면됩니다.
다음은 최종 코드입니다.
for num in number {
if num % 15 == 0 {
print("\(num) fizz buzz")
} else if num % 3 == 0 {
print("\(num) fizz")
} else if num % 5 == 0 {
print("\(num) buzz")
} else {
print(num)
}
}
그만큼 간단하므로 원하는 언어를 사용하여 시작할 수 있습니다.
코딩 즐기기