###前提・実現したいこと
下記コードのwhile式とif式の構造を理解仕切れていません。
そのため、2つ以上の式が複合している場合の式の構造やその処理の順序を理解したいと考えています。
##質問
下記のwhile ifの式の処理の順序の認識は正しいのでしょうか。
間違いがある場合はご指摘頂ければと思います。
###発生している問題・エラーメッセージ
今回のコードの要素の説明 1 binary_searchは二分探索を行うためのコードを表す => アルゴリズム。 2 arr_sizeの値からvalueの値があるかを探索する。 #=> arr_size = 10 value = 9とします。 3 ローカル変数arrには、1からarr_sizeの値を配列した値を代入 #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 4 ローカル変数left = 0 #初期化処理 ローカル変数right = arr.last #変数arrの最後の要素を返す ローカル変数mid = 0 #初期化処理
whileとif文の処理の関して 1 while left <= right doが真の間、繰り返し処理を行う。 2 mid = (left + right) /2 # 0 + [10] /2 = 5 3 if式の処理を行う。mid = 5から6へ if arr[mid] == value return "Found!" elsif arr[mid] < value left = mid + 1 #midの値が5 < 9 => 6 = 5 + 1 else right = mid - 1 end 4 if式の処理を行う。mid = 6から7へ if arr[mid] == value return "Found!" elsif arr[mid] < value left = mid + 1 else right = mid - 1 end 5 if式の処理を行う。mid = 7から8へ if arr[mid] == value return "Found!" elsif arr[mid] < value left = mid + 1 else right = mid - 1 end 6 if式の処理を行う。mid = 8から9へ if arr[mid] == value return "Found!" elsif arr[mid] < value left = mid + 1 else right = mid - 1 end 7 if式の処理を行う。mid == value(9 == 9)となったため処理が終わる。 if arr[mid] == value return "Found!" elsif arr[mid] < value left = mid + 1 else right = mid - 1 end
###全体のソースコード
Ruby
1 2class B 3 def binary_search(arr_size, value) 4 arr = (1..arr_size).to_a 5 6 left = 0 7 right = arr.last 8 mid = 0 9 10 while left <= right do 11 mid = (left + right) / 2 12 if arr[mid] == value 13 return "Found!" 14 elsif arr[mid] < value 15 left = mid + 1 16 else 17 right = mid - 1 18 end 19 end 20 end 21end 22 23find_at = B.new 24puts find_at.binary_search(10, 9) 25 26
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/27 03:36
2015/10/27 03:55
2015/10/28 15:21