テルの競プロメモ

競プロに関するメモ

競技プログラミングで使われる英語の定義

競技プログラミング(というか Codeforces)で使われる英語の意味や定義をまとめていきます。

subarray, subsequence, subset, substring 及び contiguous

なんとなく「部分列」系の用語だな~とは分かりますが、字面だけだと定義が曖昧。

まず日本語の「部分列」「連続部分列」は、配列 {1, 1, 2 ,3, 3, 4, 5} に対して、以下のようなもの。
部分列:{1, 1, 3, 5}, {2, 4}, {1, 2, 3}, {5} など(連続していなくてもいい(歯抜けで取り出していい)が、順番は変わってはいけない)
連続部分列:{1, 1, 2}, {2, 3, 3, 4}, {4} など(上記に加え、元の配列の連続している部分のみ)



分かりやすいのは以下の2つ。
subsequence : 日本語の部分列にあたる
contiguous subsequence : 日本語の"連続"部分列にあたる

subarray は注意が必要で、
これは基本的に「連続部分列」、つまり contiguous subsequence と同じものを指しているようです。
contiguous という言葉が無いので「えっ……」という感じですが、複数サイトでそのような記事が出てきます。
(場合によっては、連続でないものも含んで subarray と呼んでくる場合があるかもしれませんが、一般的な用法でないと思われるので、そういう場合は指摘をする必要があるのかもしれません)

subset は、そのまま「部分集合」です。
{1, 3, 5, 7, 9} に対して{3, 5}, {7, 9}, {1, 9} など。
集合なので、そもそも順序といった考えがありません。

substring は、直訳すれば部分文字列に当たりますが、これは注意が必要で、一般的には contiguous (連続)の意味を含むことが多そうです。
ざっと検索した限りでは、日本語でも、「部分文字列」という言葉を「連続部分文字列」という意味で使っている人も多そうです。
でも、下のけんちょんさんの記事を見るに、やはり正しくは「連続」「contiguous」をつけない限りは「連続とは限らない」とするのが良いように思いますが……
qiita.com


下の記事が参考になりました
www.techiedelight.com

prefix sum

前からの累積和のこと
「累積和」の英訳としては、他に cumulative sum, inclusive scan というのもあるらしい。

Wikipediaより)
input numbers 1, 2, 3, 4, 5, 6, ...
prefix sums 1, 3, 6,10,15,21,...

Prefix sum - Wikipedia