タグ

algorithmとc_c++に関するpipeheadのブックマーク (5)

  • ソートアルゴリズム高速化への道 - kivantium活動日記

    先日、アルゴリズムの授業でソートのアルゴリズムをいくつか習いました。ソートアルゴリズムの名前と原理くらいは聞いたことがありましたが、実装したことはなかったのでいい機会だと思い実装してみることにしてみました。ただ実装するだけでは面白くないので高速化の限界に挑戦してみたいと思います。 計測用プログラム 今回の計測では、ランダム値が入った配列のソートを100回行い、平均時間を各アルゴリズムに競わせるというシンプルなルールにしました。プログラムは以下の通りです。 C++11で入ったメルセンヌ・ツイスタなどの機能を使っているので、ビルド時には-std=c++11を指定する必要があります。 実験に使用したパソコンのCPUはCore i3-3227U@1.90GHz、コンパイラはgcc version 4.8.4で最適化オプションには-O3を指定しました。 #include <iostream> #in

    ソートアルゴリズム高速化への道 - kivantium活動日記
    pipehead
    pipehead 2015/11/03
    バブルソート, 挿入ソート, マージソート, ヒープソート, クイックソート
  • [初心者向け] プログラムの計算量を求める方法 - Qiita

    はじめに この記事では、プログラムの計算量を求める方法を説明します。プログラミングの初心者向けに、厳密さよりも分かりやすさを優先して説明していきます。 サンプルコードについて この記事のサンプルコードは、C言語(C99)で記述しています。 計算量とは? 計算量とは、 「そのプログラムがどれくらい速いかを大雑把に表す指標」 です。 もう少し正確に言うと、 「入力サイズの増加に対して、実行時間がどれくらいの割合で増加するかを表す指標」 です。 グラフによる計算量の表現 計算量をグラフで表すと、以下のようになります。 これは、**「入力サイズ $n$ が増加するにつれて、実行時間が $n$ に比例して増加する」**ということを表しています。 別のグラフも見てみましょう。 これは、**「入力サイズ $n$ が増加するにつれて、実行時間が $n^2$ に比例して増加する」**ということを表しています

    [初心者向け] プログラムの計算量を求める方法 - Qiita
    pipehead
    pipehead 2015/07/31
    O 記法, 時間計算量, 空間計算量
  • 基本的なソートアルゴリズムまとめ+α。C言語での実装例 - Qiita

    2016/07/18追記 CountingSortについて誤りがあったため訂正しました #ソートアルゴリズム全般考察 典型的なソートアルゴリズムでは、最善で $O(n log n)$ 、最悪で $O(n^2)$ である。理想は $O(n)$ である。 比較ソートでは、必ず $O(n log n)$ の比較が必要となる。 汎用手法による分類。挿入、交換、選択、マージなどがある。 Wikipedia https://ja.wikipedia.org/wiki/ソート 授業で習った基的なソートアルゴリズムをまとめたいと思います。 実際はライブラリを使うかもしれませんが、内部を知っていて損はないので覚書です。 #まとめるソートアルゴリズム バブルソート 選択ソート Counting Sort マージソート クイックソート 奇偶転置ソート ##バブルソート バブルソート (bubble sort)

    基本的なソートアルゴリズムまとめ+α。C言語での実装例 - Qiita
    pipehead
    pipehead 2015/06/21
    バブルソート, 選択ソート, Counting Sort, マージソート, クイックソート, 奇偶転置ソート
  • http://www.sat.t.u-tokyo.ac.jp/~omi/random_variables_generation.html

    http://www.sat.t.u-tokyo.ac.jp/~omi/random_variables_generation.html
    pipehead
    pipehead 2013/04/19
    一様乱数; 線形合同法と Mersenne Twister の比較
  • 平方根を使わずに高速で2点間の距離を近似する - きしだのHatena

    2点間の距離の計算では平方根が必要になりますが、平方根は少し重い計算です。ということで、平方根を使わず、掛け算・割り算・足し算と絶対値・最大・最小だけで距離を近似する方法についての記事を翻訳してみました。 flipcode - Fast Approximate Distance Functions (12:02 補足:おそらく今の標準的なCPUでやる意味はほとんどないと思います。近似のアプローチとして面白いというくらいの話。Z80でやりましょう) 距離関数高速近似 by Rafael Baptista (27 June 2003) 2点間のユークリッド距離を求める計算式は次のようになる。 二次元では次のようになる。 この関数の計算には、平方根が必要になる。これは最近のコンピュータでも高価な計算である。平方根は逐次近似によって求められる。つまり、コンピュータは平方根近似のループを行って、与え

    平方根を使わずに高速で2点間の距離を近似する - きしだのHatena
    pipehead
    pipehead 2012/06/04
    http://www.flipcode.com/archives/Fast_Approximate_Distance_Functions.shtml の和訳; 三次元: d = (X^2 + Y^2 + Z^2)^(1/2); 二次元: d = (X^2 + Y^2)^(1/2)
  • 1