データ構造(継続的に更新)

アルゴリズム

  • 計算=情報処理
    工具によっては、特定のルールに従って、クリア及び機械の形で行われます
  • 、特定のコンピュータモデルの下で、特定の問題を解決するために設計された一連の命令である、いわゆるアルゴリズム、
    • 保留中の入力情報(質問)
    • 情報処理された出力(答え)
    • 正しさは確かに特定の問題を解決することができます
    • 決定論的アルゴリズムのいずれかは、以下からなる基本的な一連の動作として説明することができます
    • 各基本的な操作の実現可能性は、カットを完了するのに一定の時間で実現することができます
    • 任意の入力に貧弱な耐性を持っており、基本的な操作を通じて貧しい時代を出力することができます
序列Hailstone(n)   

グッドアルゴリズム

  • 正しいです
  • 堅牢な
  • 可読
  • (できるだけ速くとして、可能な限り小さな収納スペース)効率
To measure is to know.
If you can not measure it,
you can not improve it.
- Lord Kelvin

アルゴリズム分析

2つの側面:

  1. 正しさ;
  2. コスト:時間+領域必要な実行

RAM:ランダムアクセスマシン

  • レジスタシーケンス番号、合計数が限定されるものではない(R [0]、R [1] ...)
  • それぞれの基本的な操作のみ時定数
  • TMモデルの外観と同様に、RAMは、我々は、アルゴリズムの効率に信頼できる比較や評価を行うために、特定のプラットフォームに依存しないことができるように、一般的にコンピュータモデルの簡素化と抽象化です
  • これらのモデルでは、アルゴリズムの実行時間+無限アルゴリズムは動作のよああ、基本的な数がnの問題の規模を解決するために、T(N)=アルゴリズムによって実行される、動作の数は、基本を実行するために必要な必要

ランダウの記号

Mathematics is more in need
of good notations than 
of new theorems.
- Alan Turing
好读书不求甚解
每有会意,便欣然忘食
   -- 陶渊明

定数(定数関数)
のこのタイプの最も効率的なアルゴリズム
、アルゴリズム解析

He calculated just as men breathe
as eagles sustain themselves in the air.
- Francois Arago

二つの主要なタスク

  1. 正しいこと
  2. 複雑

複雑性分析の主な方法

  1. イテレーション:総和
  2. 再帰:再帰的に追跡+プッシュリリース
  3. +認証をゲス

シリーズ

  • 等差数列:最後の項目と同じ順序の広場
  • パワー和シリーズ:最初のオーダーの電力よりも高いです
  • 等比数列:同じ順序の最後の項目
  • コンバージェントシリーズ:定数
  • 高調波シリーズ:1 + 1/2 + ... + 1 / N = O(Nログ)
  • 対数進行:LOG1 + LOG2 + ... + LOGN = O(Nログ)
相关书籍:Concrete Mathematics

バブルソート

//n 为在某个位置之前排序(不包含),相当于arr数组的长度
public void vuvvlesort(int[] arr,int n){
  for(boolean sorted = false; sorted = !sorted;  n--){
    for(int i = 1; i < n; i++){
      if(arr[i-1]>arr[i]){
        swap(arr,arr[i-1],arr[i]);//交换两个元素位置函数,需要自己实现
      }
    }
  }
}

裏表紙推定値(バック・オブ・エンベロープ計算)

某位物理学家当时在测量原子弹爆炸威力时,在安全范围内将一张纸撕成很多个碎片,在爆炸时将手里的纸扔下,通过计算纸张落下的位置来 计算原子弹爆炸的威力,与当时计算机计算出来的数值仅仅差距为2倍,换算成O的算法,同阶!!! 

小さな思考:あなたは地球の円周を測定した場合、どのように?

イテレーションは人工的な、再帰的なパーティー超自然的な力(反復するためには、再帰する人間、である 、神。)
パブリックな未亡人原則としてルールは、スコアも(大きな力の制御がされている場合 、いくつかの男性のコントロールと同じ原理:それはありますその数を分割の単なる質問 )

ジェーンと統治

分割統治

  • ハーフ再帰的
    配列の合計:半分再帰
sum(int[] arr,int lo,int hi){
  if(lo == hi)  return arr[lo];
  int mi = (lo + hi) >> 1;
  return sum(arr, lo, mi) + sum(arr, mi + 1, hi);
}
    public int[] max2(int[] arr, int lo, int hi){
        int[] result=new int[2];
        if (lo + 2 == hi) {
             return arr[lo] >= arr[lo+1] ? new int[]{ arr[lo], arr[lo + 1] } : new int[]{arr[lo + 1], arr[lo]};
        }
        if (lo + 3 == hi) {
            if (arr[lo] >= arr[lo + 1]) {
                return arr[lo + 1] > arr[lo + 2] ? new int[]{arr[lo], arr[lo + 1]} 
                                            : arr[lo] >= arr[lo + 2]  ? new int[]{arr[lo], arr[lo + 2]} : new int[]{arr[lo + 2], arr[lo]};
            } else {
                return arr[lo] > arr[lo + 2] ? new int[]{arr[lo+1], arr[lo]}
                                            : arr[lo + 1] >= arr[lo + 2] ? new int[]{arr[lo + 1], arr[lo + 2]}: new int[]{arr[lo + 2], arr[lo + 1]};
            }
        }
        int mi = (lo + hi) >> 1;
        int[] los = max2(arr, lo, mi);
        int[] his = max2(arr, mi, hi);
        if (los[0] >= his[0]) {
            return los[1] >= his[0] ? new int[]{los[0], los[1]} : new int[]{los[0], his[0]};
        } else {
            return his[1] >= los[0] ? new int[]{his[0], his[1]} : new int[]{his[0], los[0]};
        }
    }
    private void swap(int[] arr, int a, int b) {
        arr[a] = arr[a] ^ arr[b];
        arr[b] = arr[a] ^ arr[b];
        arr[a] = arr[a] ^ arr[b];
    }

ダイナミックプログラミング

Make it work,
make it right,
make it fast.
- Kent Beck

思考の計算:フィボナッチ数

public int  f(int n){
  if(n == 0){
  	return 0;
  }else if(n == 1){
  	return 1;
  }
  return f(n - 1) + f(n - 2);
}

アルゴリズムの時間計算量が特に高い、おそらく50必要数に関する顕著な遅延が表示されており、それぞれの後に複数の指数関数的成長表示され、アルゴリズムの時間複雑度は、O(N ^ 2)であり、
改善:

public int f(int n){
  int f=0;
  int g=0;
  while(0 < n--){
    g += f;
    f = g - f;
  }
  return g;
}

シーケンス(サブシーケンス):
二つの文字列の最も一般的なシーケンスを実行します

等待更新...
递归版本(O(2^n))
动态规划版本(O(m*n)

ベクトル

&抽象データ型のデータ構造

  • 抽象データ型:データモデル+モデル操作のセットで定義されています
  • データ構造:特定の言語に基づいて、アルゴリズムADTのセットを達成するために

リニアアレイ

  • 静的空間管理- >ダイナミックスペース管理
    蝉の哲学:
    成長のすべての期間の後、本体だけでなく、住宅を収容することができない
    ことではなく、オリジナルのシェルを流しています...
  • 容量戦略倍増
    インクリメントを

分析方法:

  • 平均分析
  • シェア分析

敏感な入力(入力センシティブ):最高と最悪の複雑格差
54

リリース7件のオリジナルの記事 ウォンの賞賛0 ビュー105

おすすめ

転載: blog.csdn.net/weixin_44188300/article/details/103744150