「数学的な美しさ」思考+コードの仕様を読むための最初の仕事

                            「数学的な美しさ」フェルトを読みます

  最初に私は、私はしていない言語のレッスン、なぜ書評を書きたいので、先生は、私たちはこれは私が理解していなかった本である「数学の美しさ」を見てみましょう、しかし、数学的な美しさは、しかし、後に読んでなぜ数学を見てこの本は本当に便利にするだけ。

  実際に、私はいくつかの章を読んでいないが、統計的言語モデルだけでなく、目の前で話すことは私に多くの関心を引き起こしたが、また私に大きなインスピレーションを与えました。本の中で述べたように、テキストのシーケンスの確率を知りたい場合はSに表示され、シーケンス内の各単語の出現確率はP(S)= P(W1)P(W2 | W1)と乗算されるP(W3 | W1、W2)... P(WN | W1 W2 ..... WN-1)、P(W2 | W1)はワードが最初に表示される場合、第2ワードでよく知られています発生確率。しかし、あなたは、単語が関連している以前のn-1に単語の出現確率を計算量が高い計算するには大きすぎるので、難しい計算し、マルコフの仮定をしたい場合にのみ、同じWiでそれを表示される任意の単語の確率は単語の前でのWi-1関連。以下の式を簡略化することができる:P(S)= P(W1)P(W2 | W1)P(W3 | W2)···P(のWi |のWi-1)。

  これは、各機械翻訳システムバーレーンの後、我々はすべてモーセBLEU値で埋め実験室でテストする必要があり、私の新入生統計的機械翻訳システムのことを思い出します。BLEU値は2つの文の類似度を決定するために使用される、単純な栗与える:2つの文S1を= Iは、C ++を学ぶ; S2:私はJavaの学習、これら2つの文の類似度は2/3分子であります翻訳候補単語の数が基準翻訳(同じ文を参照翻訳中かどうか)に表示され、分母は言葉候補変換数です。なぜBLEUは、いくつかの基準の翻訳に対応する単語の機械翻訳であるため、同じ文章翻訳で参照が、しかし、より多く有する複合スコアを計算するために比較され、したがって、文と比較されていないかどうかを言うことはありませ基準期間に比べて翻訳。干渉一般的な単語を避けるために、我々はまた、結果は、最終BLEUを得るために最大に互いに比較され、マルチワードの比較の精度は、文章中の各基準翻訳を表示改善する回数を用います。

  また、ワードが最大の確率は最高のワード方式である場所を見つけるために計算登場した後、それぞれの文の統計的言語モデル確率を使用して、中国のあいまいな言葉の問題を解決するための統計モデルを使用します。これは私がコーパスの準備で、インストールの過程で、モーセを考えてみましょう。

トークン化:単語や句読点の間にスペースを挿入します。
Truecasing:文中の単語のそれぞれは、データのスパース性を減らすことができますプロトタイプに変換される可能性が最も高いです。
 クリーニング:長い文章と空のステートメントは、トレーニング中に問題を引き起こすので、削除し、削除された大幅にずれ文を削除することができます。

前処理コーパスでは、最初の中国語の単語コーパスの必要性は、パラレル整列コーパスは、後に使用GIZA ++を促進します。

 私は、統計的機械翻訳を参照して、統計的言語モデル「数学的な美しさ」を支援することは偉大であると考えています。

   ゆっくりと「数学的な美」を読んで私は切っても切れないまだ多く、数学とコンピューターを学ぶことができることが判明してきた、多くのアルゴリズムは、数学に関連したトレーニングモデルが、私はそこになると信じて「数学の美しさ」の世話をしていきますより深い理解。 

標準としてのC ++コード仕様で:

参考:(1つのニュース)11最も包括的なC / C ++コーディング標準の概要 - https://blog.csdn.net/p942005405/article/details/80282572 CSDNのブログ - oadaさんのブログ

まず、文書の組版


1.ヘッダーファイルを含みます

 •まず、システムヘッダファイル、ユーザヘッダファイル。
 •システムヘッダは、安定的なディレクトリ構造は、サブウェイのパスを含めるために使用されるべきです。
 •カスタムヘッダファイル、ディレクトリ構造が不安定で、それはDSPに含まパスを指定する必要があります。
 •アプリケーションシステムヘッダファイル:#include <xxx.h>
 カスタムアプリケーションとの•ファイル:#include "xxx.h"
 •参照のみが必要なヘッダファイル。

2.時間とcppのファイル

 •ヘッダファイルは、インラインという名前のファイル.inlを.hの命名; *という名前のC ++の.cppファイル
 大文字と小文字、小文字または混合して•ファイル名。たとえばDiyMainview.cppinfoview.cpp無意味な名前を使用しないでください:例えばXImage.cpp; SView.cpp; xlog.cpp;
 •特殊な状況に加えて、ヘッダファイル、使用されるべき#ifdefブロックを制御します。
 •ヘッダは#endifコメントを並べる必要があります。
 •最初の文書、マクロ定義のコードブロックは、グローバル変数、グローバル定数、型定義、クラス定義、インライン部分に続く最初のコードブロックであって、。
 •命令、マクロ定義、グローバル変数、関数定義を含むCPPファイル。

3.ファイルの構造

 •ファイルは、ファイルヘッダのコメントやコンテンツが含まれている必要があります。
 2行の空白行は、空白行またはその原理に基づいて機能本体•間の特別な場合を必要としないことができます。

4. 空行

 •ヘッダ制御ブロック、#include部分、マクロ定義部、class2行の空白行を有する部分との間、部分グローバル定数、グローバル変数部分、機能および機能。

第二に、注釈


1.ファイルヘッダコメント

 •著者、ファイル名、ファイルの説明、作成日(オプション)

2.関数のコメント

 •キー関数は、関数の使用に関するメモを作成する必要があります。
 •特殊な関数パラメータ、リリースなどを担当して、引数の目的の説明。
 •特別な状況に加えて、コードの前に書かれたコメントは、コードの行の後に置かないでください。
 •それぞれについて、#elseまたは#endif旅の終わりにコメント。
 •含むがこれらに限定されないキーコードのコメント、:ように関数呼び出し、表現、枝や、割り当て。
 •グッド未実現完全なコード、またはさらに、コードを最適化する必要がTODO ... //追加する必要があります
 。•コードをデバッグ、唯一// DEBUGのコメントを追加
 •コードはコメントNOTEで、注目を集める必要があるが... //
 •大きなブロックの終わりのために、などfor,while,do行う|ながら|ようと、用//エンドを追加することができます

第三に、命名


1.原則

 •アイデンティティ:モジュール全体の命名スタイルのアイデンティティを維持し、その基底クラスの命名スタイルやモジュール全体を追跡するために、サブモジュールまたは派生クラスを書きます。
 •識別子:その英単語またはそれらの組み合わせを使用して識別子が、それは直感的で綴り予想EENOWテキストである必要があり、用語は、正確にアルファベットで名前のないようになっています。
 •情報量の長さを&&最小限の原則最大化:識別子明確な意味を維持しながら、私たちはその長さを短くしようとする必要があります。
 •あまりにも似て避けてください:例えば、単独の識別子の大文字と小文字の区別に似て表示されていない"i"与"I""function""Function"そうで。
 •同じ名前の異なるレベルでスコープを避けてください:プログラムの名前は、二つの異なるスコープ間の文法的な間違いなしものの、ローカルおよびグローバル変数とまったく同じように表示されますが、誤解を招くません。
 名前の識別子は、次のような正しい反意語基を有する排他的意義があります:•正しい名前識別子は、排他的な意義を持っている"nMinValue" とし"nMaxValue""GetName()" そして"SetName()" ...。
 •避け番の名前が表示されます:値1として、番号が表示される名前を避けるようにしてください、値2、など、ロジックは、数字を必要としない限り。これは、自分の脳に名前を付け、(最も容易なため、番号で)無意味な名前につながるために不本意怠惰なプログラマを防ぐためです。

2. T、C、M、Rクラス

 •Tは、リソースがそのデストラクタでの動作中に放出されていない、単純なデータ型のクラスを表すリソースを制御できません。
 •CはにCBaseから継承するクラスを表します。このクラスは、スタックから変数を定義することができないだけでヒープから作成することができます。
 •Mは、インターフェイスクラスを表します。
 •Rは、システムのタイプで、通常は固有のリソースは、です。特殊なケースでは、Rタイプは、コード開発には表示されません。

3.関数名

 関数名•Mクラスは、しなければならないHandleXXX例えば、命名:HandleTimerEvent;例えば、Javaのスタイルをお勧めしませんhandleTimerEvent;例えば、アンダースコアによって推奨されていない標準のCスタイルのコードに加えてhandle_event
 •休暇機能を、接尾辞L.と
 •残す機能、および接尾辞LCとクリーンアップスタック、に。
 •接尾辞LDと、機能のままにして、オブジェクトを削除します。

4.ファンクションのパラメータ

 •接頭辞として使用関数のパラメータ。
 •ネーミングおよびハンガリー避け、混合現れるapBuffer名前を。使用がaBuffer可能。
 •構造によって置き換えられ、比較的長い時間関数のパラメータは、考慮すべきです。
 •あなたがより多くの引数を避けることができない場合は、各パラメータは、レイアウト上の1行を占めているために考慮されるべきである、垂直方向に整列パラメータ名。

5.メンバ変数

 •ほとんどのメンバ変数は、Mで始まります。
 •ハンガリーを混合し、mpBuffer名として命名避けます。mBufferとすることができます。

6.ローカル変数

 •ループ変数と小文字への単純な文字列を持つ単純な変数。例えば、int i;
 •ポインタ変数はp、例えば、で始まりますvoid* pBuffer;

7.グローバル変数

 •グローバル変数g_最もプレフィックス。

8.クラス名

 •クラスとオブジェクト名は名詞でなければなりません。
 •動詞である必要があり、クラスのメンバ関数名の動作を実装します。
 アクセスとクエリ機能名•クラスのメンバーは、名詞や形容詞でなければなりません。

9.スタイルの互換性

 •移植またはオープンソースコードについては、C ++の命名規則ではない、オリジナルのスタイルに従うことができます。

第四に、コーディングスタイルの側面

1.タブとスペース

 •各行のインデントの先頭でだけでなく、スペースで、タブを使用することができ、その後、スペースで統一タイピング。制御インデントタブの先頭に加えて、他の部品、インデントのために必要なスペースを整列させます。これは、別のエディタでの表示例ずれを回避できます。
 •余分なスペースは、コードの行の末尾に表示することはできません。
 •しないで"::","->","."周りのスペースを追加します。
 •しないでください",",";"前にスペースを追加します。

2.定義と{

 •クラス、構造体、列挙型、労働組合:別の行をブレース

3.機能

 •{関数本体は、新しい行を必要とする、あなたは{の前にインデントされていることができません。
 •特別な状況に加えて、ボディは2行の空白行を機能することはできません。
 •特別な状況に加えて、ボディは、マクロ定義命令を機能することはできません。
 •身体の機能が密接に関連する間の空白行せずに、ロジック・ステートメントを下げ、他の場所が空白行区切り文字を追加する必要があります。
 •ヘッダファイルに定義されたinline空白行が推奨する機能、機能、の間に空白行を持つことができません。

4.コードブロック

 •  "if"、"for"、"while"、"do"、"try"、"catch" それ自体で他の文の行に、文が続いていない実行されます。関係なく、どのくらいのは、「{}。」文を実行するために追加されます これは、あなたが書いてコードを修正ミスを防ぐことができます。
 •  "if"、"for"、"while"、"do"、"try"、"catch" 括弧と括弧内の式は、キーワードの横にすることができ、そのような表現が強調されています。

他5.

•他のelse文} {1行、3行のコードを書いた場合のステートメントは、方法は推奨されない場合。

コードの6行

 •コードの行は、ちょうど変数の定義として、一つのことを行う、あるいは一つだけの文を書きます。このコードは読みやすいとコメントを書きやすいです。
 •複数行の変数の定義は、美の追求のコードレイアウトは、変数は、垂直方向に整列させることができます。
 •最大の行の長さが特定の文字内に制御されなければならない現在の画面が適切である範囲内で、全てを見ることができます。

7. switchステートメント

 •ケースとスイッチキーワードが整列する必要があります。
 子供が変数を持っている場合•case文は、{}はそれらが含まれています。
 •同様の文が簡単な場合が並置されている場合は、コードブロックの場合を考えるには、コードの行を記述します。
 •単純なケースとの間に空白行ができず、配慮が複雑なケースの間に空行によって分離与えられるべきです。
 •ケース語文は別の行にブレース、およびケースが書いた行はありません。
 •switch文のすべての支店のデフォルトを提供します。
 •ケースコメント文を追加する必要があります分割する必要がない場合。

8.サイクル

 •空気の循環利用できる  for( ;; ) か、  while( 1 ) または while( true )

5種類


•*と&が続き、ポインタと参照型の定義。
•必要な場合を除き、浮動小数点数を使用しないようにしてください。
•使用してtypedefプログラムを簡素化するために複雑な構文を。
•無名の型を定義しないでください。例えば:typedef enum { EIdle, EActive } TState;
私たちが使用している場合は以下の組合•、シンプルなデータ型のメンバーです。
•使用して、enum一定の(関連のグループ)を交換してください。
•マジックナンバーを使用しないでください。
•参照ポインタと交換してください。
•変数の初期化がすぐに完了している定義に使用していたまで、待っていません。
•よりエレガントな解決策がある場合は、キャストを使用しないでください。

第六に、表現


•式に代入文を使用しないでください。
•浮動小数点型が等しいか等しくない判断であることは避けてください。
•あなたは、操作を実行して、列挙型列挙に割り当てることができません。
•サイクリング中にループカウンタを変更しないでください。
•ヌルポインタがで検出され  if( p )
た非nullポインタ•検出します if( ! p )

例を規制するためのJavaコード:

参考:通訳アリの公式コード規格 - 特に房に - ブログパークhttps://www.cnblogs.com/renyuanwei/p/9169452.html

命名規則:

1.コード名は、アンダースコア、またはドル記号で終了することはできません、アンダースコアやドル記号で始めることはできません。

2.コード混合ピンインと英語を使用しないでください名前を付けられますが、直接使用する中国の道を許可していません。

3. UpperCameCaseスタイル・クラス名は、(接頭大文字変換方法は、マルチワード嵌合)こぶの形(例えば、そのようなモデル名に関連する技術として、特定の例外:DO / BO / DTO / VO)に従わなければなりません。

前記メソッド名、パラメータ名、メンバ変数、ローカル変数は、こぶ状に準拠している必要があり、一貫性のある使用lowerCamelCase(ラクダフォント)であります

5. (忘れやすい)すべて大文字で定数名の単語の間にアンダースコアで区切られました、

6.小文字で統一されたパッケージ名、およびポイント間の英語の単語の区切り文字の唯一のセマンティックな性質

 命名法:

1.セマンティック明確な、あまりにも長くはない名前を完了するために努力

2.探して回避するためである私は、テキストを知らない、完全に非標準の略語を排除

(ベスト略語を使用しません)

クラス名:

1.抽象クラス名または使用抽象基底の始まり; Expetion端を使用して、指定された例外クラス、テストクラスというクラス名は、それがテストを開始から終了までテストします

サービスとDAOクラス2.、SOAの概念に基づいて、サービスインタフェースを露出する必要があり、Implを有する接尾内部インタフェース実装クラスとの間の差

3.インタフェース名は、インタフェース名として対応する形容詞を取る能力を記述する場合

4.列挙型クラス名は、列挙型の接尾辞を持参することをお勧め有名な名前はすべて大文字を列挙する必要があり、単語と単語の間にアンダースコアで区切られています

5.デザインパターンは、特定のパターンが推奨されるクラス名に反映されている場合

前記統一されたパッケージ名単数形、複数のクラス名と、クラス名は複数形を使用することができます

定数規程:

1.任意のマジック値(つまり、定義された定数なし、である)コードに直接表示することができない発生します

2.すべてのクラス定数の定数メンテナンスを使用しないでくださいは、一定の機能に応じて分類されるべきである、別のメンテナンス

3.定数多重階層は5有する:クラス内で一定のクロスアプリケーション共有、アプリケーション共有、サブプロジェクト、袋一定共有内の定数、一定のシェア内、共有定数

4.それはクラスの名前以外の属性で拡張された場合に使用される唯一の列挙型変数の値の変更は、範囲の列挙内で使用しなければならない場合

5.確かにインターフェイスメソッドに関連した、あなたは変数を定義する必要がある場合は、インターフェイスに変数を定義しないようにしてください、そしてアプリケーションを通じて一定の基礎となっています

(コア:1の定数は使用しないでください。2一定制御を行うこと。)

構文:

1. 長いまたはロング初期割り当て、あなたは誤解を招く、資本L、ない小文字のL、桁1と簡単に混乱小文字を使用する必要があります。

2.インタフェースのクラス属性とメソッドは、有効とJavadocコメントと合わせ、シンプルコードを維持し、(公共および追加しない)いかなる修正記号を追加しないでください

3.すべてのオーバーライドメソッドは、あなたがコメントを追加する必要があります@Override

4.可変パラメータは、最後のパラメータリストに配置する必要があります

5.finalレッスンやプログラムの応答の効率を向上

フォーマットの制約:

1.タブ文字の使用を禁止する、4つのスペースを使ってインデント

2.一方向絞り文字以上120

3. テキストファイルのエンコーディングUTF-8へのIDE

ラインは、Windows形式を使用していない、Unixのファイル形式を使用してIDEで壊れます

方法は、文のインビボグループで実行される変数の集合との間に挿入文が定義され、異なるビジネスロジックまたは空白行の異なるセマンティクス間

規程ノート:

1.すべてのフィールドは、注釈付きの列挙型は、各データ項目は、使用を記載されなければなりません

2.コメントの英語の解釈が明確でない場合は、中国のコメントでの問題、それは明らか。固有名詞やキーワードは、元の英語のテキストを保つことができます

コードアウト3.コメント説明結びつけるために、できるだけ多くのではなく、(それ以外の場合は直接削除を復元するために非常に短い時間をお勧めしていない限り)単にコメントアウト

4.良い名前、コードの構造は自明で、コメントが所定の位置に簡単かつ正確に表現することが

コードスタイル:

1. 高速スイッチでは、それぞれの場合等、いずれかのブレーク/リターンによって終了、または注釈のプログラムの実行がケースになるまで継続されます

2.あなたは、中括弧を使用する必要がある場合/他/ /しばらくの間/コードの唯一の行は、次の形式を使用しないよう場合でも、文を実行します。

(条件)if文。

3.方法は以下のように書き換えることができるならば、それ以外の、他の使用を最小限に抑える推奨します

IF(条件){

...

OBJを返します。

}

//その後、他のビジネスロジックのコードを書きます

(コードのみのインデントのトラブル大きな塊を持参するだけでなく、コードの可読性が低下しますので、他)

4.)(もしあれば()...他に...他...モード論理式を使用する必要がある場合は、[か]は状態のデザインパターンを使用するよりも多くの3層以上を、強制的に

(例えばのgetXXX / isXXなど)一般的に使用される方法は耐えるに、読みやすさを改善するために、意味のあるブール変数名に他の複雑な条件文、複雑な割当ての論理判定結果を実行しない加え5.

ブール=(!file.open(ファイル名、 "W")= NULL)&&(...)||(...)を存在していました。

{(存在する)場合

...

}

メソッド名:

サービス/ DAO層方式の命名規則:

1.接頭辞getメソッドを持つ単一のオブジェクトを取得します

2.複数のオブジェクトは、メソッドのリストが付い取得します

3.統計的方法は、カウントが付い取得します

4.(推奨)保存方法を挿入するか、接頭辞を挿入

5.(推奨)プレフィックス削除を行うには削除または削除

6.接頭辞更新を変更する方法

私は次の研究で私のコードように、これらの2つのを規制するつもりです。

 

おすすめ

転載: www.cnblogs.com/snowlxy/p/11442965.html