不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

paizaラーニング『アルゴリズム入門編: 「巡回セールスマン問題」を学ぶ (全8回)』を受講してみた

2021-03-31 22:39:54 | paiza

『アルゴリズム入門編: 「巡回セールスマン問題」を学ぶ (全8回)』


メモ

#01:巡回セールスマン問題とは?

#02:入力データの形式を確認し、プログラムの枠組みを考えよう

  • 設計

#03:2次元平面上の点を扱おう

  • Pointクラス:整数座標を表す
  • java.awt.Pointの使い方
    • import java.awt.Point;
    • Point p = new Point(x,y)
  • 2点間の距離の計算
    • Pointクラスのdistanceメソッド

#04:2次元平面上の経路を扱おう

  • 経路の距離
  • 経路の表示

#05:ロジックを変数、関数・メソッドで整理しよう 

  • tsp関数の作成

#06:入力処理を作ろう

  • ループによる入力処理

#07:貪欲法を考えよう

#08:貪欲法で解いてみよう

  • 学びを深めるためのキーワードの紹介
    • 本レッスンでは、貪欲法による最近傍(Nearest Neighbor)法と呼ばれるアルゴリズムについて学んできた。
      巡回セールスマン問題の貪欲法のアルゴリズムは他にもいくつか有名なものがあり、特に近傍挿入法(Nearest Insertion)法が有名。
    • 2-opt法や3-opt法などのk-opt法は、実装が比較的簡単な、巡回セールスマン問題の局所解探索アルゴリズム。
    • 焼きなまし法やタブーサーチなどの局所解探索アルゴリズムとして有名な手法。
    • 厳密な解の求め方としては、ビット列を利用した動的計画(DP)法による解法が15頂点程度までのデータに対して、現実的な時間で解を求められることが知られている。
    • また、整数計画法と分枝限定法を組み合わせた手法では、より多くの頂点をもつデータに対して厳密解を求めることができる。

認定証



学習ステータス


最終的なジョブは、一流女剣士のままだったな

paizaラーニング『アルゴリズム入門編: 「ハノイの塔」を学ぶ (全10回)』を受講してみた

2021-03-31 21:20:20 | paiza

『アルゴリズム入門編: 「ハノイの塔」を学ぶ (全10回)』


メモ

#01:ハノイの塔の問題を理解しよう

#02:ハノイの塔のデータ構造を考えよう

  • 変数の用意と初期化メソッド、printメソッドの作成

#03:1つの円盤を動かす処理

  • 円盤を動かすメソッドの作成

#04:円盤が1枚、2枚、3枚のときの解法を考えよう

  • 1つ1つ指定して移動。

#05:一般的な解法を考えよう

  • 再帰呼び出しを使う方法

#06:再帰で実装する

  • 再帰呼び出しの実装
※ なぜそうなるのかよく分からんが、たった数行でハノイの塔が解けるなんて!?😲 
ここで、ジョブが進化

#07:カウントを追加する

  • カウントを追加

#08:円盤の移動回数を調べる

  • 円盤の枚数と移動回数
枚数移動回数
11
23
37
415
531
※ 前回の移動回数×2+1の関係だな
  • 移動回数=2^n-1

#09:特定のステップの状態を表示する

  • 指定したステップの状態を表示

#10:まとめて移動して、再帰を省略

  • 再帰処理を減らして、円盤が多くても対応

認定証



学習ステータス


なんか文字が表示された状態でスクショされちゃったな😅 

paizaラーニング『アルゴリズム入門編: FizzBuzzとフィボナッチ数を学ぶ (全7回)』を受講してみた

2021-03-30 23:49:14 | paiza

『アルゴリズム入門編: FizzBuzzとフィボナッチ数を学ぶ (全7回)』


ちょっと始めるのが遅くなってしまった。
せめてこの2講座を明日(3/31)の午前0時までに修了することはできるだろうか?

メモ

#01:FizzBuzz問題に挑戦しよう

#02:FizzBuzz問題を改良しよう

  • FizzBuzzのプログラムを少し違う方法で作成する
※ このチャプターの演習課題を終了するとジョブが進化。

#03:フィボナッチ数に挑戦しよう vol.1 - シンプル編

#04:フィボナッチ数に挑戦しよう vol.2 - 配列編

  • 途中の計算結果を配列に格納しておく。
※ このチャプターの演習課題を終了するとジョブが進化。

#05:フィボナッチ数に挑戦しよう vol.3 - シンプル再帰編

  • シンプルな再帰を使う。
    → 負荷が大きい。

#06:フィボナッチ数に挑戦しよう vol.4 - 再帰1回編

  • 再帰呼び出しの回数を2回から1回に減らす
※ このチャプターの演習課題って普通に解けるものなのか?

#07:フィボナッチ数に挑戦しよう vol.5 - ビネの公式編

  • ビネの公式を使う
  • 使った関数
    • べき乗:Math.pow(基数, n)
    • ルート:Math.sqrt(数値)
    • 切り捨て:Math.round(数値)

認定証

思いの外、てこづってしまった!?😅 


学習ステータス




paizaラーニング『Java入門編10:例外処理を理解しよう (全13回)』を受講してみた

2021-03-29 22:59:38 | paiza

『Java入門編10:例外処理を理解しよう (全13回)』


メモ

#01:例外処理の概要を理解しよう

  • 実行時エラーに対応するのが、例外処理。
  • 例外処理(Exception)の機能
    • try:あらかじめコードを指定して、プログラム実行時に、処理の問題を検出する
    • catch:問題を検出した時、どのように対応するか記述しておく
    • throws:対応を記述していない場合、メソッドの呼び出し元に対応を任せる
  • 例外が発生する例(コンパイルエラーなし)
    - ゼロで割り算
    - 配列の範囲外アクセス
    - ファイルが存在しない
    - オブジェクトがnull
    - 引数が不正
  • 例外が発生する例(コンパイルエラーあり)
    • 以下の処理を行う場合は、必ず例外処理を記述する。
      - ファイルの読み書き
      - ネットワークにアクセス
      - データベースにアクセス
      → チェック例外(検査例外)

#02:簡単な例外処理してみよう

  • try-catch-finally
    - try : 例外を捕捉する範囲
    - catch : 例外ハンドラー。例外発生時の対応処理
    - finally : 例外が発生してもしなくても、必ず実行する処理
  • 例外処理 - 0除算
    • try {
       // 実行時エラーが起こりそうな処理
      } catch (Exception e) {
       e.printStackTrace();
      } finally {
       // 必ず実行する処理
      }

#03:いろいろな書式で例外に対応しよう

  • 例外処理のメッセージを「実行時エラー」タブに出力する
    • System.err.println()

#04:発生させる例外を変えてみよう

  • 数値変換の例外
  • 登場した例外
    - Exception すべての例外を捕捉する
    - ArithmeticException ゼロ除算など、不正な算術計算で発生する例外
    - NumberFormatException 数値変換する文字列が不正な形式の時に発生する例外
    - ArrayIndexOutOfBoundsException 配列の範囲外にアクセスする例外

#05:複数の例外を捕捉してみよう

  • 複数の例外に対応するコード
    • try {
      } catch (NumberFormatException e) {
      } catch (ArithmeticException e) {
      } catch (Exception e) {
      } finally {
      }

#06:具体例:標準入力でプレイヤーを選択する

  • 具体例:標準入力でプレイヤーを選択するプログラム

#07:throwで意図的に例外を投げよう

  • throwで直接例外を投げる

#08:テキストファイルを読み書きしよう

  • 必要なライブラリのインポート
    • import java.io.*;
      import java.util.*;
  • ファイルの用意
    • File file = new File("test.txt");
  • テキストファイルを書きこむ(上書き)
    • FileWriter filewriter = new FileWriter(file);
      filewriter.write("Hello world\n");
      filewriter.write("Hello Java\n");
      filewriter.close();
  • テキストファイルを1行ずつ読み込む
    • Scanner scan = new Scanner(file);
      while (scan.hasNextLine()) {
       String line = scan.nextLine();
       System.out.println(line);
      }
      scan.close();

#09:ファイルアクセスに例外処理を追加しよう

  • ファイル読み書き + 例外処理
    • throws IOExceptionを削除するとコンパイルエラー
  • FileNotFoundException ファイルが存在しない場合の例外

#10:ファイルアクセスにtry-with-resourcesを使おう

  • ファイルアクセス + try-with-resources
    • 書き込み:try (FileWriter filewriter = new FileWriter(file)) {
    • 読み込み:try (Scanner sc = new Scanner(file)) {

#11:例外クラスのクラス構成を理解しよう

  • 例外オブジェクトの親子関係のサンプル
    Exception ← RuntimeException ← IllegalArgumentException ← NumberFormatException
  • 例外関連クラスの種類
    • Throwable
      エラーと例外のスーパークラス
    • Exception
      チェック例外/検査例外(プログラム内で捕捉が必要)
    • RuntimeException
      非チェック例外/実行時例外(プログラム中で捕捉は任意)
    • Error
      致命的な問題が発生し、実行を継続できない問題を表す。
  • 主なチェック例外:Exception
    • IOException
      ファイルやネットワークなど入出力の問題を検出
    • FileNotFoundException
      ファイルが開けなかったことを検出。IOExceptionのサブクラス
    • SQLException
      データベースアクセスの問題を検出
  • 主な非チェック例外
    • ArithmeticException
      ゼロ除算などの算術計算の問題を検出
    • NumberFormatException
      数値変換時に文字が与えられたことを検出。IllegalArgumentExceptionのサブクラス
    • ArrayIndexOutOfBoundsException
      配列の範囲外アクセスを検出

#12:throwsで例外処理を呼び出し元に任せよう

  • throwsで、例外対応を呼び出し元に任せる

#13:throwとtry-catchで再スローしよう

  • throwとtry-catchを組み合わせる再スローについて学習する。
    • 再スローでは、メソッドのcatchブロックの中から、受け取った例外を呼び出し元にスローする。そのおかげで、捕捉した例外を、catchのところで出来るだけ対応して、残りの作業を呼び出し元に任せることができる。

認定証

やっぱり例外の勘所がつかめないな〜😕 
チェック例外だったら、ちゃんと記述しておかないとコンパイルエラーなるらしいから、なんとかなるかもしれないけど。



何はともあれ、Java入門編もこれですべて修了だな。
契約期間も残り2日!?
さて、あと何個の講座を受けられるか?
全部終わらなかったとしても、とりあえず今月で解約して、
あともう1ヶ月単発で契約してみるかな?

まだ、受講していない講座はこんな感じかな?

学習ステータス


おぉ〜、なんか奇跡の騎士、かっちょえ〜😍 
アップの写真も載せとこう。


paizaラーニング『Java入門編9: HashMap(連想配列)の基礎 (全6回)』を受講してみた

2021-03-29 10:54:23 | paiza

『Java入門編9: HashMap(連想配列)の基礎 (全6回)』


メモ

#01:HashMapとは何かを学ぼう

  • HashMap(連想配列)とは
    HashMapクラスは、まとまったデータを便利に扱うことができるデータ構造のひとつ。キーと呼ばれる文字列で、それぞれのデータを区別する。
  • HashMapの使いどころ
    • DBとやり取りするデータの処理
    • APIとやり取りするデータの処理
※ Pythonでいうところの辞書みたいなものだな。

#02:HashMapを作る

  • HashMapの作成
    • import java.util.HashMap;
    • HashMap<String, String> testMap = new HashMap<String, String>();
      • <>の中はクラスを指定する。intは使えないので、Integerを使う。
  • HashMapの要素を格納
    • testMap.put("キー", "値");
  • HashMapの要素を取り出す
    • testMap.get("キー");

#03:HashMapの基本操作

  • 要素を削除する
    • testMap.remove("キー");
  • HashMapの要素数
    • testMap.size()

#04:HashMapをループで処理する

  • ループで、HashMapからキーとエントリーの値を取り出す
    • 拡張forを使う
      for (Entry<String, String> entry : testMap.entrySet()) {
       System.out.print(entry.getKey() + ", ");
       System.out.println(entry.getValue());
      }

#05:RPGのアイテム一覧を再現1

  • マップとループを使った具体例として、RPGのアイテム一覧を作成する。

#06:RPGのアイテム一覧を再現2 

  • 画像用ハッシュとアイテムの並び順配列を用意
  • アイテム名を取り出す
  • 画像ファイル名を取り出す
  • HTMLで画像を表示する

認定証



学習ステータス