入門編 このサイトは、すでにプログラミングの基本を身に付けたプログラマーが、アルゴリズムとデータ構造の学習サイトです。入門編では、最も基本的なアルゴリズムとデータ構造について説明します。プログラミングを始めたばかりか、これから学習する人は、こちらからスタートしてください。
計算量とは このサイトでは、さまざまなアルゴリズムを紹介してきましたが、こういったアルゴリズムの性能は、どのように評価すればよいのでしょうか?そもそも、アルゴリズムは、かかった時間で評価することは困難です。なぜなら、同じアルゴリズムで記述されたプログラムでも、実行環境やハードの性能が違えば、まるで違った結果になってしまうからです。 そのため、アルゴリズムの性能を評価するために、計算量(けいさんりょう)という指標が用いられます。計算量には、時間計算量と空間計算量とがあります。 前者は処理時間がどれだけ掛かるのかを表し、後者はどれだけの記憶容量を必要とするかを表します。 多くの場合、単に計算量と言えば、前者の時間計算量のことを指します。 O(オーダー)記法 前述のように、計算量とは、単純に「3秒かかる」といったような表現をしません。 そもそも「3秒」というのは、ある特定のハードの上での結果に過
0. オーダーって何? オーダーについて知っておくべき5つのことをご覧ください. 1. ソート ソート(ソーティング,並べ替え,整列)のアルゴリズムについて,になるもの,になるもの,になるものが知られています. というのは,2重ループを使ったソートです.素朴なソートアルゴリズム,と言ってもいいでしょう.バブルソートや選択法なんかが当てはまります. になるソートで有名なのは,クイックソートです.再帰(分割統治法)を使うアルゴリズムという点でも,学ぶ価値があります.なのですが,クイックソートは,ソートされる配列の並びが極端だと,になることも知られています.そこで,クイックソートの平均時間計算量は,最悪時間計算量は,なんて言い方をします. 2つの値の比較を繰り返すようなソートでは,オーダーはよりも小さくすることはできません.logが出てくる理由を簡単にいうと,n個の点からなる平衡2分木の高さが,
研究室のゼミ発表で,「オーダーのことはよく分かっていませんが…」という前置きで計算量の見積もりをしているものを,昨年,今年と見かけました. この日記が役に立つか,余計な御世話になるか分かっていませんが,ここに整理を試みてみました. 1. ビッグ・オー記法 「アルゴリズムの計算量をオーダーで表してみなさい」と指示されたときのオーダーは, 注文,発注という意味でもなく, 順番*1,順序,秩序という意味でもなく, 「百万のオーダー」*2というような使い方でもなく, 数学の位数という意味でもなく, ビッグ・オー記法,あるいはwikipedia:ランダウの記号を用いて表すものを言います. 2. 一番次数の高いもの以外,それと係数は無視 ビッグ・オー記法では,基本的に,一つの文字に関するできるだけ簡単な数式に,「O( )」をかぶせます.このとき, 複数の項の足し算なら,次数の最も高いものだけを残し,他
無限大や 000 付近でのふるまいを,以下の2つの考え方に従って大雑把に評価します。 影響力が一番強い項以外無視する 定数倍の差は無視する(係数は書かない) 例えば,n3+nn^3+nn3+n はルール1により n→∞n\to\inftyn→∞ では n3n^3n3 と同じくらい,2nlogn2n\log n2nlogn はルール2により n→∞n\to\inftyn→∞ では nlognn\log nnlogn と同じくらい,と考えます。 以下では,無限大でのふるまいについて詳しく解説します(000 付近でのふるまいは最後に少しだけ)。 主にアルゴリズムの計算量評価に用いられる記号です。 三種類の記号について,表記・大雑把な意味(重要)・きちんとした定義・具体例を解説します。 ビッグオー(重要) 表記: f(n)=O(g(n))f(n)=O(g(n))f(n)=O(g(n)) 意味:
はじめに この記事では、プログラムの計算量を求める方法を説明します。プログラミングの初心者向けに、厳密さよりも分かりやすさを優先して説明していきます。 サンプルコードについて この記事のサンプルコードは、C言語(C99)で記述しています。 計算量とは? 計算量とは、 「そのプログラムがどれくらい速いかを大雑把に表す指標」 です。 もう少し正確に言うと、 「入力サイズの増加に対して、実行時間がどれくらいの割合で増加するかを表す指標」 です。 グラフによる計算量の表現 計算量をグラフで表すと、以下のようになります。 これは、「入力サイズ $n$ が増加するにつれて、実行時間が $n$ に比例して増加する」ということを表しています。 別のグラフも見てみましょう。 これは、「入力サイズ $n$ が増加するにつれて、実行時間が $n^2$ に比例して増加する」ということを表しています。 計算量を求め
0〜1のランダムな数を出力するサンプルプログラムを紹介します。 ここではrand関数を使って乱数を生成します。rand関数を使ったことがない方は、まずはこちらをご覧ください。 乱数の生成 – rand … 1〜10のランダムな数値を出力するサンプルプログラムを紹介します。 ここではrand関数を使って乱数を生成します。 rand関数を使ったことがない方は、まずはこちらをご覧ください。 乱数の生成 – r … 乱数を使って、サイコロをつくってみましょう。 ここではrand関数を使って乱数を生成し、1〜6の数字をランダムに出力するサンプルプログラムを紹介します。 rand関数を使ったことがない方は、まずはこち …
○ 最大公約数,最小公倍数とは 2つ以上の正の整数に共通な約数(公約数)のうち最大のものを最大公約数といいます. 例 12 と 18 の公約数は,1,2,3,6 で, 6 が最大公約数 2つ以上の正の整数の共通な倍数(公倍数)のうち最小のものを最小公倍数といいます. 例 2 と 3 の公倍数は,6,12,18,24,... で, 6 が最小公倍数 ※最小公約数という言葉は使う値打ちがありません.なぜなら,公約数のうち一番小さい(正の)数は 1 に決まっているからです. ※最大公倍数は決められません.なぜなら,大きな(正の)公倍数は,次の例で分かるように限りなくあるからです. 例 2 と 3 の公倍数 : 6 , 12 , 18 , 24 , 30 , 36 , ...
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く