読者です 読者をやめる 読者になる 読者になる

新人SEの学習記録

14年度入社SEの学習記録用に始めたブログです。気づけば社会人3年目に突入。

学習記録:.NET、プログラミングコンテスト

[学習記録] .NET

参考書籍

.NET開発テクノロジ入門 2014年版 VisualStudio2013対応版 (MSDNプログラミングシリーズ)

.NET開発テクノロジ入門 2014年版 VisualStudio2013対応版 (MSDNプログラミングシリーズ)

内容

第1章:Webプラットフォームとしての.NETの進化
  • .NET1.x:.NETの普及と成長
    • 共通言語ランタイム(CLR)の革新
    • Windowsフォーム
    • ASP.NET Webフォーム
      • コードビハインド:フォームデザインとアプリケーションコードの完全な分離
      • Windowsフォーム同様、イベントドリブン型のアプリケーション開発が可能
  • .NET 2〜3.x:標準化の促進
    • .NET Framework2.0でのやや小規模な変更
      • Partialクラスやジェネリック型のサポート
      • 64bit対応、Micro Frameworkの追加
    • Windows Communication Foundation(WCF)の登場
    • デスクトップアプリケーションのマークアップ
    • オープン化へのシフト
    • データアクセスコンポーネントの変化
      • 従来のADO.NETハEDBMSのデータ構造に依存したデータモデルを利用
      • しかし、UIが必要とする情報の構造とRDBMSの構造とが一致しない>マッピングに苦慮
      • Webアプリケーションのアーキテクチャにとって最適な構造でない
      • ユニバーサルデータアクセス構想:RDBMS以外の構造型データや非構造型データなどに統一的なアクセス手段の提供
      • そこで、ADO.NET以外に新たなデータアクセスのための機能セットを追加
      • ADO.NET Entity Framework、WCF Data Services、LINQ
    • リッチインターネットアプリケーションの実現
      • AdobeFlashを利用した動的コンテンツやリッチなWebインタラクションの普及
      • これに対抗し、WPFの応用技術であるSilverlightをリリース
      • XAMLベースで記述されたUXをJavaScriptやマネージ言語でコントロール
    • クラウドコンピューティングへの対応
  • .NET 4.x:更なるオープンの世界へ
    • オープン化の波と変更点
      • CLRのバージョンが4に、並列プログラミング対応やマルチタッチ対応
      • ASP.NET MVC.NET Framework 4の機能として提供
      • Entity Frameworkの改良、WCF Data Servicesのアップデートなど
      • NuGetによるパッケージ管理:オープンソースやフリーのプログラミング素材の管理
    • Webプラットフォームにおけるオープン化
      • 従来のaspx形式のViewエンジン以外に、新たなViewエンジンRazorが利用可能に
      • WebMatrix:あらかじめテンプレートや既存のCMSなどを取り込みカスタマイズすることで容易に構築
      • Webフォーム、MVCに加えて「Webページ」機能の追加:シンプルなWebアプリケーション開発向き

[学習記録] プログラミングコンテスト

内容

6章:計算量
  • 計算量には、以下の2つがある
    • 実行時間を予測する時間計算量
    • メモリ使用量を予測する空間計算量
  • 時間計算量
for (int i = 0; i < n; ++) {
    for (int j = 0; j < m; ++) {
        function();
    }
}
    • 上記のコードでは、function()はn × m回実行される
    • ループの一番深いところにある(一番実行される)部分の計算時間を求める
    • この場合の計算量はO(nm)、つまり計算時間は大体nmに比例
      • 係数や変数が大きくなった場合に蒸す出来る項は除いてOK
    • だいたい、10^8回計算する仰臥存在したら2sec制限を超える
  • 計算量の算出が難しいケース
    • 平方根が含まれるケース(i * i <= nのループなど)>O(√n)
    • logが含まれるケース
    • 再帰処理が絡むケース
    • ループ内で計算量の大きい関数を呼び出すケース
      • 関数の計算量 × ループ回数が計算量になる(その場合、必ずしもループの一番深い箇所が最大の計算量ではない)
      • ライブラリの関数の計算量にも注意(sort関数はO(nlogn)、など)
  • 空間計算量
    • 64MB制限として考えると、
    • int型が4byteのとき、1600万個のint型配列を作成可能
      • 100万個程度であればint型の配列は気にせず作ってよい
      • 連想配列などは100万個を超えたら注意
      • 1000万個のint型配列を作る場合には空間計算量に注意