algorithm チュートリアル
アルゴリズムの使い方
サーチ…
備考
アルゴリズムの紹介
アルゴリズムは、コンピュータサイエンスとソフトウェアエンジニアリングに普遍的です。適切なアルゴリズムとデータ構造の選択は、プログラムの効率をコストと時間の面で改善します。
アルゴリズムとは何ですか?非公式には、アルゴリズムは特定のタスクを達成するための手順です。具体的には、アルゴリズムは、ある値(または値の集合)を入力とし、ある値または値の集合を出力として生成する、 明確に定義された計算手順です。したがって、アルゴリズムは、入力を出力に変換する一連の計算ステップです。 Cormen et。 al。アルゴリズムが必ずしも入力を必要としないと明示的には言及していない。 [Cormen:2001:IA:580470]
正式には、アルゴリズムは5つの特徴を満たさなければならない:[Knuth:1997:ACP:260999]
- 有能さ 。アルゴリズムは、有限数のステップの後に必ず終了する必要があります。
- 完全性 。アルゴリズムの各ステップを正確に定義する必要があります。実行されるアクションを厳密に指定する必要があります。 [Cormen:2001:IA:580470]が「明確に定義された」という用語を参照するのはこの品質です。
- 入力 。アルゴリズムはゼロ個以上の入力を有する 。これらは、アルゴリズムが開始される前に最初にアルゴリズムに与えられたり、実行されるときに動的に与えられる量です。
- 出力 。アルゴリズムには1つ以上の出力があります 。これらは、入力と特定の関係を持つ量です。同じ入力が何度も何度も繰り返されると、アルゴリズムは同じ出力を生成することが予想されます。
- 効果 。アルゴリズムも一般的に効果が期待されます。その操作は、鉛筆と紙を使っている人が原理的に、そして有限の時間内に正確に行うことができるように、十分に基本的でなければならない。
有限性を欠いているが、アルゴリズムの他のすべての特性を満たす手続きは、 計算方法と呼ばれることがあります。 [クヌス:1997:ACP:260999]
サンプルのアルゴリズム上の問題
アルゴリズム上の問題は、これらのインスタンスの1つで実行した後に、動作する必要があるインスタンスの完全なセットと、その出力の説明を記述することによって指定されます。問題と問題のインスタンスとの間のこの区別は、基本的なものです。 ソートと呼ばれるアルゴリズムの問題は、次のように定義されます。[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 }
スウィフトでの簡単なFizzバズアルゴリズム入門
Swiftでのプログラミングには初心者、PythonやJavaなどのさまざまなプログラミング拠点から来ている人にとって、この記事は非常に役に立つはずです。この記事では、迅速なアルゴリズムを実装するための簡単なソリューションについて説明します。
フィッツバズ
Fizz Buzz、FizzBuzz、またはFizz-Buzzと書かれたFizz Buzzを見たことがあります。彼らはすべて同じことを指しています。その「もの」が今日の議論の主題です。まず、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であり、どのbuzzであるのかを確認する必要があります。これを行うには、forループを作成して、初期化した配列を反復処理します。
for num in number {
// Body and calculation goes here
}
この後、私たちは単にif else条件とモジュール演算子をswift ie - %で使って、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で割り切れるかどうかを調べるために、数値を再度実行します。コードは基本的に配列の各数値2回目は、最初に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)
}
}
それと同じように、任意の言語を使い始めることができます
コーディングを楽しむ