algorithm算法入門


備註

算法簡介

算法在計算機科學和軟件工程中無處不在。選擇合適的算法和數據結構可提高我們的計劃成本和時間效率。

什麼是算法?非正式地,算法是完成特定任務的過程。 [Skiena:2008:ADM:1410219]具體來說,算法是一個明確定義的計算過程,它將一些值(或一組值)作為輸入,並產生一些值或一組值作為輸出 。因此,算法是將輸入轉換為輸出的一系列計算步驟。 Cormen et。人。沒有明確指出算法不一定需要輸入。 [Cormen:2001:IA:580470]

形式上,算法必須滿足五個特徵:[Knuth:1997:ACP:260999]

  1. 有限性 。算法必須始終在有限數量的步驟之後終止。
  2. 確定性 。必須精確定義算法的每個步驟;必須嚴格規定要採取的行動。正是這種質量[Cormen:2001:IA:580470]用術語“明確定義”來指代。
  3. 輸入 。算法具有零個或多個輸入 。這些是在算法開始之前或在運行時動態地給予算法的量。
  4. 輸出 。算法具有一個或多個輸出 。這些是與輸入具有指定關係的數量。我們期望當一次又一次地給出相同的輸入時,算法產生相同的輸出。
  5. 有效性 。通常預期算法也是有效的 。它的操作必須足夠基本,以便它們可以在原則上完成,並且在有限的時間內由使用鉛筆和紙的人完成。

缺乏有限性但滿足算法的所有其他特徵的過程可以稱為計算方法 。 [Knuth的: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 Buzz算法入門

對於那些剛接觸Swift編程的人以及來自不同編程基礎的人,例如Python或Java,本文應該非常有用。在這篇文章中,我們將討論一個實現swift算法的簡單解決方案。

Fizz Buzz

您可能已經將Fizz Buzz視為Fizz Buzz,FizzBu​​zz或Fizz-Buzz;他們都指的是同一件事。這個“事物”是今天討論的主要話題。首先,什麼是FizzBu​​zz?

這是求職面試中常見的問題。

想像一下從1到10的一系列數字。

1 2 3 4 5 6 7 8 9 10
 

Fizz和Buzz分別指的是3和5的倍數。換句話說,如果一個數字可被3整除,則用fizz代替;如果一個數字可被5整除,則用buzz代替。如果一個數字同時是3和5的倍數,則該數字將替換為“fizz buzz”。從本質上講,它模仿了著名的兒童遊戲“fizz buzz”。

要解決此問題,請打開Xcode以創建一個新的遊樂場並初始化如下所示的數組:

// for example 
let number  = [1,2,3,4,5]
// here 3 is fizz and 5 is 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 playground中的調試控制台查看輸出。您會發現“fizzes”已經在您的數組中進行了整理。

對於Buzz部分,我們將使用相同的技術。在滾動瀏覽文章之前,我們先嘗試一下 - 完成此操作後,您可以根據本文檢查結果。

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]
 

我們將數字範圍從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)
  }
}
 

簡單到這一點,您可以使用您選擇的任何語言並開始使用

享受編碼