質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

368閲覧

AtCoder: C - Go Home、時間計算量がなぜ√Xになるのか

bbdd

総合スコア43

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

0クリップ

投稿2020/07/27 14:42

編集2020/07/27 14:43

お伺いしたいこと

この問題
を等差数列を用いて回答した場合( t(t+1)2 ≥ Xを判定し、これを満たすtを探す場合 )の計算量の求め方がわからないです。

詳細

解説に
t を前から順番に試して t(t+1)2 ≥ X か毎回判定するだけでも, 時間計算量 O(√X)で答えを求めることが出来ます。 とありますが、この時の計算量がなぜO(√X)となるのかがわかりませんでした。
助言頂けると幸いです

Bearded-Ockham👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

t(t+1)/2をt^2とします。(計算量を出すため、簡単にしておきます)
そうすると不等式はt^2>=Xとなります。
これを解くと, t>=√Xとなります。
つまり、tを小さいほうから代入してこの不等式をためすと, tが√Xくらいになると答えがわかることから、必要な計算量としてはO(√X)となります。

たとえばX=5とすると, t>=√5となりますが、tを順番に代入して試していくと,
t=1 t^2=1<X
t=2 t^2=4<X
t=3 t^2=9>X
となって、t=3が答えとわかります。だいたい√X=√5(=2.236)くらいのtの値まで調べれば十分なので時間計算量としてはO(√X)となります。

t*(t+1)/2のまま同じ議論をしてもオーダー的には√Xになるため、結局同じ結果になります。

投稿2020/07/27 18:11

編集2020/07/28 04:45
Penpen7

総合スコア698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問