対称性

回 8-6 分野 8 考え方

対称性は、何かを入れ替えたり裏返したりしても変わらない性質です。2 人の距離は A から B でも B から A でも同じなので、n 人の全部の組の距離は、n × n 回ではなく n × (n − 1) ÷ 2 回の計算で足ります。対称性を見つけると、数える量を半分にしたり、計算せずに答えを出したりできます。

入れ替えても変わらない物を見つけ、数える量を半分にする方法を、二重ループの回数と確率の数え上げで確かめます。

100 人の全部の組の距離を出すのに、何回計算するか

4950 回で足ります。100 × 100 = 10000 回は要りません。

A と B の距離は、B と A の距離と同じです。自分と自分の距離は 0 なので計算しません。だから、全部の組 (i, j) のうち i < j の組だけを計算し、残りは写せば済みます。100 人なら 100 × 99 ÷ 2 = 4950 組です。

入れ替えても変わらない性質を、対称性と呼びます。物理学や群論でも大事な考えですが、この回ではプログラミングで数える量を減らす使い方に絞ります。この回では、対称性を見つけて数える量を半分にする方法と、計算せずに答えを出す方法を、Python で回数を数えて確かめます。

対称性とは

入れ替えても変わらない性質

対称性は、ある操作をしても変わらない性質です。操作には、裏返す、回す、2 つを入れ替えるなどがあります。どの操作で変わらないかを言うと、対称性の中身が決まります。

操作変わらない物の例呼び方
直線で折り返す二等辺三角形、y = x² のグラフ線対称
1 点の周りに 180 度回す平行四辺形、y = x³ のグラフ点対称
2 つの値を入れ替えるx + y、x × y、2 人の距離対称式、対称な関係
中心の周りに一定の角度だけ回す正三角形 (120 度)、正方形 (90 度)回転対称
並びを逆にする「しんぶんし」のような回文回文

y = x² のグラフは、x を −x に替えても y が変わらないので、y 軸について線対称です。

対称式

x と y を入れ替えても変わらない式を、対称式と呼びます。x + y と x × y は対称式です。x² + y² も対称式で、x² + y² = (x + y)² − 2xy と、x + y と xy だけで書けます。x − y は入れ替えると符号が変わるので、対称式ではありません。

組を 1 度だけ数える

n 人の中の 2 人の組で、順番を区別しない物は、n × (n − 1) ÷ 2 組です。順番を区別して数えた n × (n − 1) 通りは、(i, j) と (j, i) を 2 回ずつ数えているので、2 で割ります。

数え方n = 4n = 100何を数えたか
i と j を全部回す1610000自分との組と、逆向きの組も入る
i ≠ j129900逆向きの組を 2 回数える
i < j64950どの組も 1 回

計算せずに答えを出す

サイコロを A と B が 1 個ずつ振ります。A の目が B より大きい確率はいくつかを考えます。A と B を入れ替えても状況は同じなので、「A が大きい」と「B が大きい」の確率は同じです。同じ目になる確率は 1/6 なので、残りの 5/6 を半分に分けて、A が大きい確率は 5/12 です。36 通りを数えなくても出ます。

動かして確かめる

1 本目は、二重ループの 3 つの書き方で、何組を処理するかを数えます。

動かす 組を 1 度だけ数える

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

4 16 12 6 6
100 10000 9900 4950 4950

i < j の組は n × (n − 1) ÷ 2 と一致しました。実際のコードでは、内側のループを range(i + 1, n) から始めると、余分な組を回さずに済みます。

2 本目は、平面上の点の距離の表を作ります。全部の組を計算した表と、半分だけ計算して写した表が同じになるかを確かめます。

動かす 距離の表を半分だけ計算する

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

全部 10000 回
半分 4950 回
同じ表 True

計算の回数は 10000 回から 4950 回に減り、表は全く同じでした。math.dist は 2 点の間のまっすぐな距離を返す関数で、2 点を入れ替えても同じ値です。

3 本目は、サイコロの確率を、36 通りを全部数えて確かめます。

動かす A の目が B より大きい確率

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

A が大 5/12
B が大 5/12
同じ 1/6
対称性から 5/12

A が大きい確率と B が大きい確率は、どちらも 15/36 = 5/12 でした。対称性で出した 5/12 と一致します。

4 本目は、回文の判定です。前から i 番目と後ろから i 番目を比べるので、比べるのは前半の分だけです。

動かす 回文は半分だけ比べる

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

'しんぶんし' (True, 2)
'abccba' (True, 3)
'abcdba' (False, 3)
'a' (True, 0)
'' (True, 0)

右の数は比べた回数です。5 文字の「しんぶんし」は 2 回、6 文字は 3 回で、真ん中の文字は比べません。1 文字と空の文字列は、比べずに回文と判定します。

対称性で考えると外れる所

向きのある関係は対称ではない

SNS の「フォロー」は、A が B をフォローしても、B が A をフォローするとは限りません。一方通行の道の所要時間や、片道の運賃も同じです。向きのある関係で i < j の組だけを調べると、半分を見落とします。半分にする前に、入れ替えて本当に同じかを確かめます。

自分との組と、同じ値の扱い

i ≤ j と i < j では、自分との組 (i, i) が入るかが違います。「同じ人を 2 回選んでよいか」は問題ごとに違うので、境目の書き方を問題文と照らします。サイコロの問題でも、同じ目 (1/6) を除いてから半分にしました。

順番を区別する問題で半分にする

順番が意味を持つ問題 (1 位と 2 位を決める、送り手と受け手) では、(i, j) と (j, i) は別の物です。並べ方の数 (順列) を数えるべき所で 2 で割ると、答えが半分になります。

仕事とコンテストでどう使うか

対称性で考える場面は、次の通りです。

  • 二重ループ。似た文書の組を探す、衝突する図形の組を探すなど、全部の組を調べる処理を for j in range(i + 1, n) で半分にする
  • 表を半分だけ持つ。距離の表や相関係数の表は対称なので、半分を計算して写す。行列の分野では対称行列と呼ぶ (分野 6)
  • 重複を除く。友達の組を数えるとき、(A, B) と (B, A) を同じ組として 1 回だけ数える。SQL なら a.id < b.id の条件で自己結合する
  • 確率と期待値。入れ替えても同じ状況なら、それぞれの確率は同じと言える。計算の量を減らし、答えの確かめにも使える
  • 図形と画面。左右対称の図は、片側を描いて反転させれば済む

よくある問い

対称性とは何ですか

ある操作をしても変わらない性質です。操作が折り返しなら線対称、180 度の回転なら点対称、2 つの値の入れ替えなら対称な式や関係と呼びます。プログラミングでは、主に「2 つを入れ替えても答えが同じ」という形で使います。

n 人から 2 人を選ぶ組の数は、なぜ 2 で割るのですか

1 人目を n 通り、2 人目を残りの n − 1 通りで選ぶと、(A, B) と (B, A) を別に数えてしまいます。どの組も 2 回ずつ数えているので、n × (n − 1) を 2 で割ります。

線対称と点対称の違いは何ですか

線対称は、ある直線で折り返すと重なる形です。点対称は、ある点の周りに 180 度回すと重なる形です。正方形のように、両方を持つ形もあります。

対称性を使ってよいかは、どう確かめますか

入れ替えた (j, i) の答えが、本当に (i, j) と同じかを、小さい例で全部数えて比べます。2 本目のコードのように、全部計算した表と半分だけ計算した表を比べるテストを書いておくと安心です。

確認クイズ

答えだと思う選択肢を押すと、その場で正誤と理由が開きます。3 問すべてに正しく答えると、この回は修了で、石が緑に変わります (この端末のブラウザに残ります)。間違えた問いは、あとから解き直せます。

1 問目

20 チームが、どの 2 チームとも 1 回ずつ試合をします。試合は何回ですか。

2 問目

次の式のうち、x と y を入れ替えても変わらない (対称式である) ものはどれですか。

3 問目

SNS で、利用者どうしの「フォロー」の向きを全部調べたいとき、正しいのはどれですか。

説明課題

「100 人の全部の組の距離を、10000 回ではなく 4950 回の計算で出せる理由」を、対称性という言葉を使って 3 文で説明してください。書いたら、下の模範解答を開いて比べてください。

模範解答

自分の説明を書いてから開いて、比べてください。

この回の先の一歩

二重ループを書く前に「(i, j) と (j, i) は同じ物か」を問えると、計算を半分にでき、重複の数え間違いも防げます。いまの自分が転職までの道のどの段にいるかは、転職診断で確かめられます。

もっと深く

この回の続きを、ゆめさくのコースの章や道具で深められます。頁の中の確認クイズに答えたあと、手を動かす量を増やしたいときに使ってください。

一次資料

どれも 2026年10月30日に開いて、題と中身を確かめました。

次へ

分野 8 考え方の回

  1. 8-1規則性を見つける小さい場合を表にする、周期、差を取る頁で読む
  2. 8-2偶奇で考える偶数と奇数、変わらない量頁で読む
  3. 8-3余事象少なくとも 1 つは全体から引く頁で読む
  4. 8-4包除原理重なりを足して引く頁で読む
  5. 8-5小問題に分ける分割統治、小さい答えから大きい答え頁で読む
  6. 8-6対称性入れ替えても変わらない物この回
  7. 8-7上界と下界見積もり、鳩の巣原理頁で読む
  8. 8-8コンテストと試験で確かめる全分野の総まとめ頁で読む

分野 8 の頁へ戻るほかの分野を見る