• 検索結果がありません。

ラーメンの食べ比べ

N/A
N/A
Protected

Academic year: 2021

シェア "ラーメンの食べ比べ"

Copied!
92
0
0

読み込み中.... (全文を見る)

全文

(1)

Ramen 解説

2014/03/20 情報オリンピック春合宿にて

MASAKI HARA

(2)
(3)

問題概要

(4)

問題概要

ラーメン屋が𝑁軒ある

(5)

問題概要

ラーメン屋が𝑁軒ある 「こってり度」が定まっている こってり度は互いに異なる こってり度 3 こってり度 5 こってり度 1 こってり度 2 こってり度 0 こってり度 4

(6)

問題概要

(7)

問題概要

(8)

問題概要

(9)

問題概要

(10)

問題概要

(11)

問題概要

(12)

問題概要

健康

のため、食べ比べは

600日

より多くは行えない

(13)

小課題1 (20点)

(14)

小課題1 (20点)

𝑁 ≤ 30

ラーメン屋の組み合わせは𝑁× 𝑁 −1

(15)

小課題1 (20点)

𝑁 ≤ 30

ラーメン屋の組み合わせは𝑁× 𝑁 −1

2 ≤ 435

(16)

小課題2 (累計50点)

(17)

小課題2 (累計50点)

𝑁 ≤ 300

(18)

小課題2 (累計50点)

𝑁 ≤ 300

(19)

小課題2 (累計50点)

𝑁 ≤ 300

こってり度最大を300手で決定できればよい (最小も同様にできるので)

(20)

小課題2 (累計50点)

(21)

小課題2 (累計50点)

(22)

小課題2 (累計50点)

普通の最大値決定アルゴリズム 暫定的な最大を決める

(23)

小課題2 (累計50点)

普通の最大値決定アルゴリズム 比較する

(24)

小課題2 (累計50点)

普通の最大値決定アルゴリズム 比較する→低いほうはリタイヤ

(25)

小課題2 (累計50点)

普通の最大値決定アルゴリズム 比較する→低いほうはリタイヤ 最大ではない 暫定的な最大 最大ではない

(26)

小課題2 (累計50点)

普通の最大値決定アルゴリズム 比較する→低いほうはリタイヤ 暫定的な最大 最大ではない 最大ではない

(27)

小課題2 (累計50点)

普通の最大値決定アルゴリズム 比較する→低いほうはリタイヤ 最大ではない 暫定的な最大 最大ではない 最大ではない 最大ではない

(28)

小課題2 (累計50点)

普通の最大値決定アルゴリズム 比較する→低いほうはリタイヤ 暫定的な最大 最大ではない 最大ではない 最大ではない 最大ではない

(29)

小課題2 (累計50点)

普通の最大値決定アルゴリズム 比較する→低いほうはリタイヤ 最大ではない 最大 最大ではない 最大ではない 最大ではない 最大ではない

(30)

小課題2 (累計50点)

(31)

小課題2 (累計50点)

最大値を決めるのに𝑁 − 1回の比較でできる

(32)

小課題3 (累計100点)

(33)

小課題3 (累計100点)

(34)

小課題3 (累計100点)

𝑁 ≤ 400

(35)

小課題3 (累計100点)

𝑁 ≤ 400 2つずつに分ける→こってり度を比較 (ここまでで𝑁/2回) あっさり こってり あっさり こってり あっさり こってり

(36)

小課題3 (累計100点)

𝑁 ≤ 400 こってりグループとあっさりグループに分ける こってり あっさり こってり あっさり こってり

(37)

小課題3 (累計100点)

𝑁 ≤ 400 こってりグループとあっさりグループに分ける あっさり こってり あっさり こってり あっさり こってり

(38)

小課題3 (累計100点)

𝑁 ≤ 400

(39)

小課題3 (累計100点)

𝑁 ≤ 400

こってりグループ→こってり度最大を見つける (ここで𝑁/2回)

(40)

小課題3 (累計100点)

𝑁 ≤ 400

(41)

小課題3 (累計100点)

𝑁 ≤ 400

あっさりグループ→こってり度最小を見つける(ここで𝑁/2回)

(42)

小課題3 (累計100点)

(43)

小課題3 (累計100点)

𝑁 ≤ 400

最初の分類に 𝑁

(44)

小課題3 (累計100点)

𝑁 ≤ 400 最初の分類に 𝑁 2 回 こってり度最大を決めるのに 𝑁 2 − 1 回

(45)

小課題3 (累計100点)

𝑁 ≤ 400 最初の分類に 𝑁 2 回 こってり度最大を決めるのに 𝑁 2 − 1 回、こってり度最小を決めるのに 𝑁 2 − 1 回

(46)

小課題3 (累計100点)

𝑁 ≤ 400 最初の分類に 𝑁 2 回 こってり度最大を決めるのに 𝑁 2 − 1 回、こってり度最小を決めるのに 𝑁 2 − 1 回 合計 3𝑁 2 − 2 ≤ 598 回の比較でできる

(47)
(48)

コーナーケース

(49)

コーナーケース

小課題3を実装すると、はじめに Compare(0, 1) を呼び出すコードになることがある → 𝑁 = 1 に注意

(50)

下界の保証

比較回数は 3𝑁

(51)

下界の保証

比較回数は 3𝑁

2 − 2 回以上必要

「最大の可能性が残っているラーメン屋」の個数を𝐾とおく 「最小の可能性が残っているラーメン屋」の個数を𝐿とおく

(52)

下界の保証

比較回数は 3𝑁 2 − 2 回以上必要 「最大の可能性が残っているラーメン屋」の個数を𝐾とおく 「最小の可能性が残っているラーメン屋」の個数を𝐿とおく 「最大の可能性も最小の可能性も残っているラーメン屋」の個数を𝑀とおく

(53)

下界の保証

比較回数は 3𝑁 2 − 2 回以上必要 「最大の可能性が残っているラーメン屋」の個数を𝐾とおく 「最小の可能性が残っているラーメン屋」の個数を𝐿とおく 「最大の可能性も最小の可能性も残っているラーメン屋」の個数を𝑀とおく 𝑉 = 𝐾 + 𝐿 − 𝑀 2 とおく。

(54)

下界の保証

補題1: 𝑉 の初期値は 3𝑁 2 である。 補題2: 𝑁 > 1 のとき、最大と最小が決まった時点での 𝑉 の値は 2 である。 補題2’: 𝑁 = 1 のとき、最大と最小が決まった時点での 𝑉 の値は 3 2 である。

(55)

下界の保証

補題1: 𝑉 の初期値は 3𝑁 2 である。 補題2: 𝑁 > 1 のとき、最大と最小が決まった時点での 𝑉 の値は 2 である。 補題2’: 𝑁 = 1 のとき、最大と最小が決まった時点での 𝑉 の値は 3 2 である。 補題3: 初期状態から終了状態までの間に、 𝑉 の値は 3N 2 − 2 以上減少する。

(56)

下界の保証

補題4: Compare(X, Y) をどのように呼び出しても、 𝑉の減少が 1 以下であるような結果が返って くる可能性がある。

(57)

下界の保証

(58)

下界の保証

(59)

下界の保証

X, Yの両方が、「最小かもしれないし、最大かもしれない」とき:

XとYの大小関係が決まると、 𝐾 と 𝐿 は 1 ずつ減少し、 𝑀 は 2 減少する。 したがって、 𝑉 は 1 減少する。

(60)

下界の保証

Xは、「最小かもしれないし、最大かもしれない」が、Yは「最小ではないが、最大かもしれない」と き:

(61)

下界の保証

Xは、「最小かもしれないし、最大かもしれない」が、Yは「最小ではないが、最大かもしれない」と き: X < Y となる可能性がある。このとき、 𝐾 は 1 減少するが、 𝐿 は減少しない。 𝑀 は 1 減少する。したがって、 𝑉 は 1 2 減少する。

(62)

下界の保証

Xは、「最小かもしれないし、最大かもしれない」が、Yは「最小ではないが、最大かもしれない」と き: X < Y となる可能性がある。このとき、 𝐾 は 1 減少するが、 𝐿 は減少しない。 𝑀 は 1 減少する。したがって、 𝑉 は 1 2 減少する。 Xは、「最小かもしれないし、最大かもしれない」が、Yは「最小でも最大でもない」とき………も同 様。

(63)

下界の保証

Xは、「最小かもしれないし、最大かもしれない」が、Yは「最小ではないが、最大かもしれない」と き: X < Y となる可能性がある。このとき、 𝐾 は 1 減少するが、 𝐿 は減少しない。 𝑀 は 1 減少する。したがって、 𝑉 は 1 2 減少する。 Xは、「最小かもしれないし、最大かもしれない」が、Yは「最小でも最大でもない」とき………も同 様。 XとY, 最大と最小を逆にしても同様。

(64)

下界の保証

(65)

下界の保証

XもYも「最大かもしれないが、最小ではない」とき: XとYの大小関係が決まると、 𝐾 は 1 減少する。 したがって、 𝑉 は 1 減少する。

(66)

下界の保証

XもYも「最大かもしれないが、最小ではない」とき: XとYの大小関係が決まると、 𝐾 は 1 減少する。 したがって、 𝑉 は 1 減少する。

(67)

下界の保証

Xは「最小かもしれないが、最大ではない」のに対し、Yは「最大かもしれないが、最小ではない」 とき:

(68)

下界の保証

Xは「最小かもしれないが、最大ではない」のに対し、Yは「最大かもしれないが、最小ではない」 とき:

(69)

下界の保証

Xは「最小かもしれないが、最大ではない」のに対し、Yは「最大かもしれないが、最小ではない」 とき:

X < Y となる可能性がある。このとき、 𝑉 は変化しない。

(70)

下界の保証

(71)

下界の保証

Xは「最小かもしれないが、最大ではない」のに対し、Yは「最大でも最小でもない」とき: X < Y となる可能性がある。このとき、 𝑉 は変化しない。

(72)

下界の保証

Xは「最小かもしれないが、最大ではない」のに対し、Yは「最大でも最小でもない」とき: X < Y となる可能性がある。このとき、 𝑉 は変化しない。

(73)

下界の保証

(74)

下界の保証

(75)

下界の保証

以上の考察より、 𝑉 の減少量が 1 に満たないようなCompare呼び出しをたくさん行うプログラ ムはダメだということもわかる

(76)
(77)
(78)

別解: 小課題1

(79)

別解: 小課題1

(80)

別解: 小課題1

std::sortの比較関数としてCompareを用いる

(81)

別解: 小課題1

std::sortの比較関数としてCompareを用いる

→std::sortの比較回数は 𝑂(𝑛 log 𝑛) なので普通はOK

(82)
(83)

別解: 小課題2

(84)

別解: 小課題2

std::min_element / std::max_element の比較関数としてCompareを用いる →比較回数はそれぞれ 𝑁 − 1 であることが保証されているのでOK

(85)
(86)

別解: 小課題3

(87)

別解: 小課題3

std::minmax_element の比較関数としてCompareを用いる →比較回数は min 3(𝑁−1)

2 , 0 であることが保証されているのでOK

(88)

別解: 小課題3

std::minmax_element の比較関数としてCompareを用いる →比較回数は min 3(𝑁−1) 2 , 0 であることが保証されているのでOK ◦ これはさっきの式と同じ C++11以降でしか使えない

(89)

別解: 小課題3

std::minmax_element の比較関数としてCompareを用いる →比較回数は min 3(𝑁−1) 2 , 0 であることが保証されているのでOK ◦ これは 𝑁 ≥ 1 ではさっきの式と同じ C++11以降でしか使えない ◦ 今回の合宿では使えなかったことになる

(90)
(91)

分布

0 2 4 6 8 10 12 0 10 20 30 40 50 60 70 80 90 100 得点 得点

(92)

おわり

1. 問題概要 2. 小課題1 (20点) 3. 小課題2 (累計50点) 4. 小課題3 (累計100点) 5. コーナーケース 6. 下界の証明 7. 別解 (小課題1・小課題2・小課題3) 8. 分布

参照

関連したドキュメント

 尿路結石症のうち小児期に発生するものは比較的少

現行選挙制に内在する最大の欠陥は,最も深 刻な障害として,コミュニティ内の一分子だけ

いない」と述べている。(『韓国文学の比較文学的研究』、

l 「指定したスキャン速度以下でデータを要求」 : このモード では、 最大スキャン速度として設定されている値を指 定します。 有効な範囲は 10 から 99999990

[r]

N2b 同側の多発性リンパ節転移で最大径が 6cm 以下かつ節外浸潤なし N2c 両側または対側のリンパ節転移で最大径が 6cm 以下かつ節外浸潤なし N3a

最大  9,000 kW( - ℃) ―  kW(  ℃) ―  kW(  ℃). 最小  -1,000 kW( - ℃) ―  kW(  ℃) ―

危険な状況にいる子どもや家族に対して支援を提供する最も総合的なケンタッキー州最大の施設ユースピリタスのト