麻婆豆腐

作成: 2025年2月2日 最終更新: 2025年2月8日

ワーシャルフロイド法を用いた麻婆豆腐の最短経路計算

ワーシャルフロイド法 (Floyd-Warshall Algorithm) は、グラフの全点対最短経路を求めるアルゴリズムです。ここでは、麻婆豆腐の調理過程 を 重み付きグラフ として表現し、ワーシャルフロイド法を適用して最短経路を求めます。

® \overline{✖️} \overline{❌}
  1. 調理過程のグラフ定義

麻婆豆腐の調理は、以下のようなステップを持ちます。 1. 材料準備 (M) 2. フライパン加熱 (A) 3. ひき肉炒め (P) 4. 調味料追加 (O) 5. 豆腐追加 (D) 6. 煮込み (O) 7. 仕上げ (U) 8. 完成 (F)

これを 有向グラフ で表し、各辺に 調理時間 (コスト) を設定します。

隣接行列 W (初期状態)

W = [ 0 5 0 3 0 2 0 4 0 6 0 3 0 2 0 ] W = \begin{bmatrix} 0 & 5 & \infty & \infty & \infty & \infty & \infty & \infty \\ \infty & 0 & 3 & \infty & \infty & \infty & \infty & \infty \\ \infty & \infty & 0 & 2 & \infty & \infty & \infty & \infty \\ \infty & \infty & \infty & 0 & 4 & \infty & \infty & \infty \\ \infty & \infty & \infty & \infty & 0 & 6 & \infty & \infty \\ \infty & \infty & \infty & \infty & \infty & 0 & 3 & \infty \\ \infty & \infty & \infty & \infty & \infty & \infty & 0 & 2 \\ \infty & \infty & \infty & \infty & \infty & \infty & \infty & 0 \end{bmatrix}

ここで、 \infty は到達不可能な状態を意味します。

  1. ワーシャルフロイド法の適用

ワーシャルフロイド法では、すべての頂点 k を 中継点 として考えながら、最短距離を更新 します。

遷移式

d i , j = min ( d i , j , d i , k + d k , j ) d_{i,j} = \min(d_{i,j}, d_{i,k} + d_{k,j})

すべての i, j, k に対して適用。

  1. 最短経路行列の計算

ワーシャルフロイド法を適用すると、最短距離行列 D が得られます。

D = [ 0 5 8 10 14 20 23 25 0 3 5 9 15 18 20 0 2 6 12 15 17 0 4 10 13 15 0 6 9 11 0 3 5 0 2 0 ] D = \begin{bmatrix} 0 & 5 & 8 & 10 & 14 & 20 & 23 & 25 \\ \infty & 0 & 3 & 5 & 9 & 15 & 18 & 20 \\ \infty & \infty & 0 & 2 & 6 & 12 & 15 & 17 \\ \infty & \infty & \infty & 0 & 4 & 10 & 13 & 15 \\ \infty & \infty & \infty & \infty & 0 & 6 & 9 & 11 \\ \infty & \infty & \infty & \infty & \infty & 0 & 3 & 5 \\ \infty & \infty & \infty & \infty & \infty & \infty & 0 & 2 \\ \infty & \infty & \infty & \infty & \infty & \infty & \infty & 0 \end{bmatrix}

この結果から、麻婆豆腐の調理に必要な最短時間は 25 分 であり、最短経路は次のようになります。

最短経路:

M A P O D O U F M \to A \to P \to O \to D \to O \to U \to F
  1. 結論

ワーシャルフロイド法を用いることで、麻婆豆腐の調理手順を最適化し、最短時間を 25 分と算出 しました!

aaa

麻婆豆腐 (Mápó dòufu) の正則言語としての定義

麻婆豆腐を正則言語として定義するには、有限状態オートマトン (Finite State Automaton, FSA) で受理される形式言語として記述する必要があります。ここでは、麻婆豆腐を生成する文字列の集合 L を定義し、その言語が正則であることを示します。

定義

麻婆豆腐の正則言語 L は、アルファベット Σ 上の文字列の集合であり、次の形式を持つ。

アルファベット Σ

Σ = { M , A , P , O , D , O , U , F , U } Σ = \{ M, A, P, O, D, O, U, F, U \}

(ここでは “MÁPÓDÒUFU” の各文字をアルファベットとする)

言語 L

L = { M A n P m O p D O U q F U n , m , p , q 1 } L = \{ M A^n P^m O^p D O U^q F U \mid n, m, p, q \geq 1 \}

(各成分の出現回数は 1 以上である)

この言語は、以下の有限状態オートマトン (DFA) で受理できる。

有限状態オートマトン (DFA) • 状態集合: Q = { q 0 , q 1 , q 2 , q 3 , q 4 , q 5 , q 6 , q 7 , q 8 , q f } Q = \{ q_0, q_1, q_2, q_3, q_4, q_5, q_6, q_7, q_8, q_f \} • 開始状態: q 0 q_0 • 受理状態: q f q_f • 遷移関数 δ: • \[ q_0 \xrightarrow{M} q_1 \] \[ q_1 \xrightarrow{A} q_1 \] (A は 1 文字以上) • [ q_1 \xrightarrow{P} q_2 ] • [ q_2 \xrightarrow{P} q_2 ] (P は 1 文字以上) • [ q_2 \xrightarrow{O} q_3 ] • [ q_3 \xrightarrow{O} q_3 ] (O は 1 文字以上) • [ q_3 \xrightarrow{D} q_4 ] • [ q_4 \xrightarrow{O} q_5 ] • [ q_5 \xrightarrow{U} q_6 ] • [ q_6 \xrightarrow{U} q_6 ] (U は 1 文字以上) • [ q_6 \xrightarrow{F} q_7 ] • [ q_7 \xrightarrow{U} q_f ]

この DFA によって、麻婆豆腐の正則言語が受理される。

正則性の証明 • DFA で受理できる言語は正則である。 • 言語 L は DFA で表現できるため、正則言語である。

したがって、麻婆豆腐は正則言語である。

MIPS アセンブリ言語で麻婆豆腐を調理するコードを書きます。ここでは、以下の手順で麻婆豆腐を調理するプロセスを MIPS の命令に落とし込みます。

麻婆豆腐調理の手順 1. 材料を準備する(豆腐、ひき肉、調味料など) 2. フライパンを熱する 3. ひき肉を炒める 4. 調味料を加える 5. 豆腐を加える 6. 煮込む 7. 仕上げにとろみをつける

MIPS アセンブリコード (擬似コードベース)

.data
    tofu:    .asciiz "豆腐を準備しました。\n"
    meat:    .asciiz "ひき肉を準備しました。\n"
    spice:   .asciiz "調味料を準備しました。\n"
    pan:     .asciiz "フライパンを熱します。\n"
    fry:     .asciiz "ひき肉を炒めます。\n"
    add_spice: .asciiz "調味料を加えます。\n"
    add_tofu:  .asciiz "豆腐を加えます。\n"
    simmer:  .asciiz "煮込みます。\n"
    finish:  .asciiz "とろみをつけて完成!\n"

.text
    .globl main

main:
    # 材料準備
    li $v0, 4
    la $a0, tofu
    syscall
    
    la $a0, meat
    syscall
    
    la $a0, spice
    syscall
    
    # フライパンを熱する
    la $a0, pan
    syscall
    
    # ひき肉を炒める
    la $a0, fry
    syscall
    
    # 調味料を加える
    la $a0, add_spice
    syscall
    
    # 豆腐を加える
    la $a0, add_tofu
    syscall
    
    # 煮込む
    la $a0, simmer
    syscall
    
    # 仕上げ
    la $a0, finish
    syscall

    # プログラム終了
    li $v0, 10
    syscall

説明 • syscall を利用して、各調理ステップを文字列として出力します。 • 各ステップで li v 0 , 4 を使い、 v0, 4 を使い、 a0 に出力する文字列のアドレスをロードしています。 • 最後に li $v0, 10 でプログラムを終了させます。

MIPS で麻婆豆腐を作ることができました!

border-radius:100000px; (ここは角丸)

Lift( L L ) can be determined by Lift Coefficient ( C L C_L ) like the following equation.

L = 1 2 ρ v 2 S C L L = \frac{1}{2} \rho v^2 S C_L ® \overline{✖️}
#include<stdio.h>

今週の週替り定食

2/3更新 ああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁああああああああぁぁぁ