ラベル 応用情報処理技術者試験 の投稿を表示しています。 すべての投稿を表示
ラベル 応用情報処理技術者試験 の投稿を表示しています。 すべての投稿を表示

2017年3月8日水曜日

ガーベジコレクション、その他メモリ配置

平成28年秋季 問16. ガーベジコレクション

問題文「プログラム実行時の主記憶管理に関する記述として適切なものはどれか。」

解答群
ア. 主記憶の空き領域を結合して一つの連続した領域にすることを、可変区画方式という。
イ. プログラムが使用しなくなったヒープ領域を回収して再度使用可能にすることを、ガーベジコレクションという。
ウ. プログラムの実行中に主記憶内でモジュールの格納位置を移動させることを動的リンキングという。
エ. プログラムの実行中に必要になった時点でモジュールをロードすることを、動的再配置という。

正直なところ、正解がイだとわかったのはガーベジコレクションという言葉を聞いたことがあって、なんとなく間違いではないことだけがわかったからで、その他の解答群についてはさっぱり理解していないので調査対象とした。

まずはそれぞれの用語をしっかりと把握してみよう。

今回検索してみて、絵付きで解説してくれているサイトさんでは断トツにわかりやすく、且つ要領を得たサイトがすぐに見つかった。

Geechs Managineさんの「5分で分かるガーベジコレクションの仕組み」である。

実際Javaを勉強しようとして出てきた用語なのでよく覚えているが、C言語などを教えてもらおうとして挫折した頃は、メモリの解放なんかについて説明を受けた記憶がある。

ざっくりまとめてしまうとプログラムが一旦利用したメモリの領域を、自動で開放する仕組み、ということになる。

Javaなどの高級言語以前はプログラムを書くときにメモリの解放を指定する必要があったとかなんとか・・・ 実際にはそこまでどっぷりプログラムの勉強できなかったのでそんなコードを書いた覚えはまるでないがw

後、これは応用情報にはあまり出てこないかもしれないが今後のために覚えておきたいのが「Scavenge GC」と「Full GC」だ。
こちらも上のリンクである程度教えてくれているが、まとめてしまうとヒープ領域と呼ばれるメモリ領域には二つの種類があり、比較的長い間使われる(つまり複数回参照されるような)オブジェクトは「Old領域」それ以外の命が短いオブジェクトは「New領域」に格納される。この「New領域」と呼ばれるところをざっくり掃除してくれるのが「Scavenge GC(Scavengerでハイエナなどの動物、清掃する・不要物を除去するなどの意)」で「Old・New領域」両方を全部掃除するのが「Full GC」ということだ。

何故覚えておきたいかというと、「Full GC」が頻繁に起こるとプログラム処理時間に影響があるから、とだけ書いておきたい。詳しく知りたい方は上記リンクを参照されたい。

次に可変区画方式について、だが、ググった結果を色々見ていると非常に端的に表現してくれているサイトを見つけた。

京都産業大学 大本教授?の平成14年度システムソフトウェア講義資料の「第7章 記憶管理」である。

おそらくは講義に使用するためにパワーポイント的にまとめた資料だと思われるが、非常に端的にかつ的確に要点をまとめてくれているのでわかりやすい。初めて開いた時は何かの冗談かバグかと思ったぐらいだが・・・

で、可変区画方式というのは、メモリを使う場合にプログラムが必要な分量だけ使う方式、ということになるが、もっと言うとプログラムが必要とするメモリのサイズはプログラムによって違うため、どれだけのサイズを指定するか?という問題が出てくる。

この割り当て方法について、プログラムがどのくらい使用するかは「しらんっ これだけ用意したからこれ使えっ( ゚Д゚)」と指定する方式を「固定区画方式」、

「ここに必要な分の領域があるからここを使ってねぇ(*´▽`*)」と指定する方式を「可変区画方式」というらしい。

他のページも時間があるときに(できればサイトがなくならないうちに)見てみたいが、他に試験で使うような内容を書いてくれているサイトもあったので紹介しておきたい。

it-資格.jpというサイトさんの「実記憶管理」である。
どうやら基本情報か応用情報資格試験用のサイトのようで、関連する用語をまとめてくれてはいる、が、全てが有益か?全てがわかりやすいか?という点では疑問がある。

次に、動的リンキングなのだが、この用語についてはなかなかピンポイントで「それが何を意味するか」という答えが出てこなかった。
ググった結果の多くは試験を受ける人を対象にしたもので、非常にざっくりと用語を説明してくれているだけである。

そこで見つけたのは「基本情報処理技術者になってください」というサイトさんの「動的リンキング」というページである。
このサイトさんはおそらく実際に何かのプログラムを作っているような人が書いているサイトなのか、非常にゆるーく、且つわかりやすく実際に怒っているだろうと思われることを例示して書いてくれている。

ただ、書かれている内容がゆるすぎる感じもあったので、英語でも検索してみた。

そこで見つけたのは「Computer Science from the Bottom Up」というサイトさんの「Chapter 9. Dynamic Linking」というページである。

転載させていただくと、
******************************
Each executable contains a reference essentially saying "I need library foo". When the program is loaded, it is up to the system to either check if some other program has already loaded the code for library foo into memory, and thus share it by mapping pages into the executable for that physical memory, or otherwise load the library into memory for the executable.
******************************

ざっくり訳すと
******************************
実行ファイル(プログラム)は「こんなライブラリが必要だよぉ」と言う情報だけ持っていて、そのプログラムが実行されるときにシステム(OS)側が他のプログラムが同じライブラリをメモリ上にロードして(呼び出して)いるかどうかをチェックし、あればその場所をプログラムに教えなければメモリにロードするということをする。
******************************
ということである。(だいぶ意訳しているので疑わしい場合は自分で訳してほしい。)

そして最後に「動的再配置」だが、これも同じくしっかりとした説明を探すのが難しかった。色々とブラウジングしてここで(全部は当然理解できなかったものの)ある程度納得のいく説明を見つけることができた。

宮城教育大学、(なんの授業かはわからないが)「授業のページ」より「オペレーティングシステム第5-2章 主記憶の管理-2-

このページ中、「5.8 動的再配置機能を用いるマルチプログラミング」という項目があり、内容を抜粋すると
******************************
メモリフラグメンテーション問題を解決するには、空き領域を結合してーつの連続した大きな空き領域にすればよい。それには、実行中のプロセスをメモリ内で移動させる必要がある。この処理を、メモリコンパクション、この機能を動的再配置機能という。****(中略)****この動的再配置機能によって、プロセスをメモリにロードするための領域の動的作成、削除、拡大、縮小によって生ずるメモリフラグメンテーションを解決できる。
******************************
そろそろ疲れてきたのでフラグメンテーションについては割愛させてもらうが、メモリのフラグメンテーションが発生した場合に、領域を効率的に使うために利用されるのが動的再配置と呼ばれる機能ということになる。

可変区画方式ではメモリが充分に空いている場所を指定してプログラムを配置するため、フラグメンテーションが発生する。このような場合にメモリを有効利用するため実行中のプログラムが利用しているメモリを別の場所に移動することでメモリの利用率を向上させようというものらしい。

ここまで調べて改めて問題を読み返してみると、「ア.ウ.エ.」については明らかに説明している文章と用語が一致していないのがわかる。。。

というか今日の俺は頑張ったっ( ゚Д゚)

2017年3月6日月曜日

MIPS

平成28年秋季 問15. MIPS

問題文「オンライントランザクション処理システムにおいて、1分当たりの平均トランザクション数が1,200件であり、1件のトランザクション処理で100万命令を実行する場合、CPU性能が100MIPSのコンピュータを使用した時のCPUの平均利用率は何%か。」

解答群
ア. 5
イ. 10
ウ. 15
エ. 20

不正解だったので調査対象にしたのだが、改めて考えてみると非常に簡単な問題だった。

逆に、こういう問題こそ取りこぼしが無いようにしたいものだ。

まず、MIPSとは、
Million Instructions per second の略とのこと。これは問題文に「100万命令を実行」とあるので、知らなくてもなんの略なのかはわかりそうなものである。

しっかりと文章を読み解くと、まず
「1件のトランザクション処理で100万命令を実行」し、利用しているCPUが
「CPU性能が100MIPS」つまり100万命令を1秒で実行する
というところから、100件のトランザクションを1秒で処理できることがわかる。

ここまで書いてきて、解答が当たったけども根本的な間違いを犯していたことに気づいた。

1秒で1件の処理だから1,200件を60秒で割ると答えは「20」だっ( ゚Д゚)

大間違いである。

100MIPSはつまり、100×100万命令を1秒で実行する(Million = 1,000,000)なので、1分当たりの処理能力は60秒×100で6,000命令となる。

1,200/6,000は「0.2」となるので、20%が正解となる。

問題の要点としては100MIPSが「100×100万命令」であるところだ。
時間がない状態で考えると間違えやすい(英語・技術両面で恥ずかしい限りだが)問題なので、特に自分の肝に銘じておきたいと思う。

2017年3月4日土曜日

仮想サーバの冗長化設計

平成28年秋季 問13. 仮想サーバの冗長化設計

問題文「仮想サーバの冗長化設計における可用性評価に関する記述のうち、クラスタソフトウェアを用いた評価として、適切なものはどれか。」

解答群
ア. OS、アプリケーションおよびハードウェアの障害に対応し、障害時に障害が発生していないサーバに自動的に処理を引き継ぐので、切替え時間の短い安定した運用が求められる場合に有効である。
イ. 仮想サーバを停止させずに物理サーバ間で仮想サーバを移動することが可能となるので、メンテナンスなど業務移行の際も含めて業務の停止が全く許容できない場合に有効である。
ウ. 物理サーバに備わっている機能を利用するので、ハードウェアの障害にだけ対応し、障害時に業務停止が許容される場合に有効である。
エ. 物理サーバのリソース(CPU、メモリなど)をブロック単位に物理的に分割し、あるブロックの障害が他のブロックに影響しないようにするので、障害時に業務の停止が許容できない場合に有効である。

まず、多少チート気味だが解答群のそれぞれの用語を見てみることにする。
ア. クラスタリング方式
イ. ライブマイグレーション方式
ウ. 仮想マシン方式
エ. パーティショニング方式

で、答えであるクラスタリング方式というものから調査を始めたところ・・・見事にラビリンスに迷い込んだ。
ただし、この分野の迷宮は実際に仕事で接する機会も多かったりするので恐怖のラビリンスというよりかはワクワクしながらあっちこっち見回っている感じである。

クラスタリングから仮想サーバ、そしてそもそもの仮想化に至るまで迷宮内部に入り込んだ時点で非常に時間を浪費していることに気がついた。そして、都合4日間お気に入り保存せずにブラウジングした結果を酔っぱらって間違ってシャットダウンしてしまった。。。

そこで、まずは「サーバ仮想化」という言葉でGoogle先生に聞いてみた。
広告を除く検索結果2位に目を引くタイトルが表示された。「5分で絶対にわかるサーバ仮想化-IT」というサイトだ。

流し読みしてみたが、具体的な名詞は少なく、概念的に仮想化というのを捉えるのであればよいのかもしれないが、では俺基準で「絶対に理解できたか?」と言うとそうは言い難い。あくまで俺基準ではあるが・・・

かなり長いシリーズで仮想化を詳述してくれていたサイトがあったのだが、シャットダウンしてしまったのが悔やまれる。。。

と・・・しばらく自分が考えそうなキーワード検索したところ、あったっ(*´▽`*)
これは久しぶりに自分をほめてあげたい。

検索ワード「仮想化 パーティショニング」で検索したところ、ASCII.jpさんの「パーティショニングによる仮想化とは?」というサイトが引っ掛かった。

このサイトさんでは、仮想化技術についてかなり詳細に取り扱っていてくれていて、第一回は「さまざまな仮想化技術の基本を理解する」となっている。ここを読み始めたが結構な分量になるのでシリーズ3分の1ぐらいで、
ハッ( ゚Д゚) 結局問題の解答を得られていないっ( ゚Д゚)
と思ったわけである。

上のシリーズは問題を解くだけでなく、最近の大規模な基幹システムなどでは普通に使われている(今働いている企業でも使われている)ものなので、時間があったら読んでみたいと思う。

では、俺が犯した間違いを繰り返さないように、必要な情報だけ拾って問題に解答できる力のみつけれるように、拾い読みして理解できるようにまとめると以下のようになる。

まず、サーバの仮想化によるクラスタリング方式について、言葉の意味は
Wikipediaによると「英語で『房』『集団』『群れ』のこと。」
英語で検索すると次のような意味になる
Dictionary.comより「a number of things of the same kind, growing or held together; a bunch: "a cluster of grapes"
となっている。ブドウの房をイメージすればよいようだ。

これを踏まえて、Enterprise Zin?さんの「クラスタサービスとは?」というサイトを見ると、かなりまとめて書いてくれている。

書いてあることをまとめると、クラスタリング方式には大きく分けて二つ、「アクティブ・スタンバイクラスタ」と呼ばれる方式と「負荷分散クラスタ」という方式に分かれている。

アクティブ・スタンバイクラスタは別の用語でいうと「ホットスタンバイ」と呼ばれる冗長化方式でサーバを2つ用意し、一つは待機系として、稼働系サーバに問題が発生した際にサービスを継続して提供するように構成されたものである。

この方式をさらに発展させたもの(だと思われるのが)負荷分散クラスタと呼ばれるもので、それこそブドウの房のようにいくつものサーバを「ロードバランサー」と呼ばれる負荷分散装置に接続して、ユーザからの要求に対して別々のサーバを割り当てる方法のことを言うそうだ。

次にライブマイグレーション方式と呼ばれる方法はどうだろう?

英語で書くと「Live Migration」で、どうやら言葉だけからすると「生きたまま移植する」みたいな意味であると想像できる。死んだ状態で移植手術が行われたら人間だったら単なる解剖になってしまうが・・・

こちらの内容については「@IT」さんの「Hyper-V 2.0のライブ・マイグレーションの基礎知識」というサイトが非常によくまとめて下さっている。

このサイトでは、ライブマイグレーションという技術の前身である「クイック・マイグレーション」という方式も含めて触れてくれており、いかにしてサーバ業務の移行に伴うシステム停止の時間を短くしているかを教えてくれている。

簡単にまとめてしまうと、ある一つのサーバの業務を完全に他のサーバに引き継ぐことを考えるとクイックマイグレーションでは
1.サーバで稼働しているメモリの内容をコピーする
2.サーバで稼働しているストレージ(HDDなど)の内容をコピーする
3.業務を引き継ぐ
という内容になるが、1.と2.を行うためにはサービスの要求を停止しないと同期が取れないのでシステムの停止がその分必要になる。

そこで、ライブマイグレーションでは、
上の2.で行っているストレージのコピーを必要なくするためにストレージをさらに別の場所に分けてしまう ということを行い、
1.についてはコピー作業を段階的に行って完全に同期が取れたタイミングで業務を引き継ぐということを行っている
ということらしい。

上手くまとまっているかわからないが、これ以上詳しい内容(もしくは俺が言っている内容が間違っている場合)は上のサイトに詳しく載っているので参照してほしい(つまり丸投げである)。

最後にパーティショニング方式については・・・
Think ITというサイトさんから「仮想化~実装技術は様々」というページに書かれているパーティショニングの項目がわかりやすい。

今日でこの項目については終わりにしたいためやっつけてしまうが、Partitionに分けて仮想化を行っているものだと思われ、サーバ資産を物理的にせよ論理的にせよ、分けて機能を提供するものらしい。

実務で色々な技術に触れる機会が多い人は、ASCIIさんの「パーティショニングによる仮想化とは?」を参照するとわかりやすいと思う。

はっきり言って俺にはわからなかったが・・・w

ここまで調べて問題を見返してみると、確かに書いてあることは全く別の内容を示していることはわかった。

ただし、問題文のウ.だけは本当に理解不能だ。
******************************
物理サーバに備わっている機能を利用するので、ハードウェアの障害にだけ対応し、障害時に業務停止が許容される場合に有効である。
******************************
一体何の役に立っているというのだろうか・・・

2017年2月25日土曜日

Very Long Instruction Word (VLIW)

平成28年秋季 問10. メモリインタリーブ

問題文「プロセッサの実行効率を上げる、VLIWの説明はどれか。」

解答群
ア. 依存関係のない複数の命令を、プログラム中で出現順序とは異なる順序で一つずつ実行する。
イ. 各命令フェッチ、デコード、実行、演算結果の出力などの各段階を並列に処理する。
ウ. 同時に実行可能な複数の動作をまとめて一つの命令として、同時に実行する。
エ. 複数のパイプラインを用いて複数の命令を同時に実行させる。

この問題というか、Very Long Instruction Wordというものを調べ始めて、何故だか壁にぶつかったような感じを受けた。

というのも、端的に「このようなところで使われているよ」というものが見つかりにくかったからだ。

一番内容がまとまっていたのは、大塚商会さんのこのサイトだった。

簡単にかみ砕いてみると、結局は複数の違う処理を行うプロセッサに対して、それぞれの処理を同時に実行できる組み合わせで一つの長い命令を作り、実行させるような処理をするマイクロプロセッサ、と言ってみてかみ砕けていないことに気がついた。

ここも大塚商会さんからだが、
********<引用ここから>********
一般に整数/論理演算ユニット向けの処理と、浮動小数点演算ユニット向けの処理、分岐処理ユニット用処理、ロード・ストアユニット向けの処理などの組み合わせからなる・・・
********<引用ここまで>********
とあるように、それぞれの得意とする処理をプロセッサ上に並列化させておき、それに対してそれぞれを一つの命令で同時実行することで処理性能を向上させようとする試みだったようだ。

過去形になっているのは、やはり大塚商会さんによると、
********<引用ここから>********
・・・1980年半ばごろ、さかんに行われたが、その後、下火になっていた。・・・2000年以降、米トランスメタのCrusoeや・・・が、VLIW型のアーキテクチャを採用して再び注目された。・・・(それぞれの会社で課題となっていたプログラムの再利用性や他のプロセッサとの互換性についてクリアにはなったものの)普及面では後れを取っている。
********<引用ここまで>********

つまり結局はあまり普及していないということだったようだ。

ざっくりとした理解なのだが、おそらく複雑な処理を前提として設計されたPC (Personal Computer)とは相反するプロセッサ省力化の考え方だったからだと思うのだが、例えば富士通さんでは「システムLSI用VLIWプロセッサコア(2001)」のように家電などの組み込みシステムなどに利用して省エネ設計を試みたりなど、どちらかというと用途を限定したところで採用されやすいもののように思われる。

ではなぜ普及面で後れを取ったのか?という疑問が当然出てくるのだが、プロセッサにある程度単純化した命令を出すために、コンパイラ側で一つの命令で複数の処理の組み合わせを考えてあげる必要があるところに課題が集中しているようで、以下のサイトで例示してくれているようになかなか一つの命令を都合よく作るのが難しいからだと言う風に理解した。

University of Massachusetts Amherst, College of EngineeringよりApplications of VLIW

上のリンクでは、いくつの命令で、どのような処理を組み合わせるかを実際に単純な例で置き換えて見せてくれるのだが、なかなか綺麗にまとまった組み合わせを作るのが難しいのがわかってもらえるかと思う(残念ながら英語のみのサイト)。

また、上の例で綺麗にまとまらない場合、ダミーの処理を命令に抱き合わせることで命令を固定の長さにするということをするらしい。が、それもまた無駄になるのとコンパイラの複雑さを助長しているようにも思われる。

また、これも英語のサイトだが、IBMさんが公開しているVLIWに関するリサーチのサイトも役に立つのではないかと思う。

IBM ResearchよりVLIW Architecture

結局色々調べた割には身にならない情報だったのはなんだか腰砕けである。

2017年2月20日月曜日

メモリインタリーブ

平成28年秋季 問10. メモリインタリーブ

問題文「メモリインタリーブの目的として、適切なものはどれか。」

解答群
ア. 同一のバンクに連続してアクセスしたとき、アクセス時間を短くする。
イ. 同一のバンクの連続したアドレスにアクセスしたとき、キャッシュミス発生時のアクセス時間を短くする。
ウ. 一つのバンクが故障しても、システムが停止しないようにする。
エ. 複数のバンクに割り振った連続したアドレスにアクセスしたとき、アクセス時間を短くする。

まずもってInterleaveという単語が意味するところが分からない。単語を丸覚えするというのは苦手なので、意味を調べてみた。

goo辞書 Interleave より
3 (1)〈冊子などに〉(別紙を)交互に[1ページおきに]挟む[差し込む]
例文: Interleave the eight-page form with carbon paper.

カーボン紙を挟み込むという例文はかなりわかりやすいように思う。何かを何かの間に挟むというような意味なんだろうと理解。

そこで実際のメモリインターリーブについて検索すると、

IT用語辞典 e-Words【メモリインターリーブ】より抜粋
****************************************
メモリの読み書きにはいくつかの段階があり、CPUがアクセス要求を行ってから実際にデータが送られてくる(あるいは書き込みが完了する)までにはレイテンシ(遅延)と呼ばれる時間差が生じる。メモリへのアクセスは時間がかかるため、コンピュータの処理速度はこの「待ち時間」に足を引っ張られている。レイテンシを短縮する試みは常に行われているが、CPU内の記憶素子との差は埋めがたく、また、低レイテンシのメモリは高価である。
一方、メモリへのアクセス要求は短期的には局所性が極めて強く、連続した領域に順番に読み書きを行うことが多い。この特徴を利用して、複数のメモリバンクにまたがって連続したアドレスを交互に振っておき、あるデータにアクセスする遅延時間の最中に次のアドレスへアクセス要求を発行して時間を有効利用するのがメモリインターリーブである。バンクの数を増やせばその分高速にアクセスできるようになり、2つのバンクを用意すれば2倍、4つで4倍の高速化を図ることができる。
****************************************

内容的にはCPUからのメモリへのアクセス待ち時間を有効活用するために、複数のバンクと呼ばれるメモリの単位に分割して、同時アクセス可能にすることで見た目上のメモリアクセス時間を短縮するという技術なんだと読み解ける。

しかし概念的な説明に終始しているので、具体的には?というところがいまいち判然としない。
そこで他のサイトも探してみると以下のような補足説明があるところを見つけた。

日立ソリューションズ IT用語辞典【メモリインターリーブ】より抜粋
****************************************
・・・なお、現在のパソコンで広く使われているデュアルチャンネル、トリプルチャンネルはメモリインターリーブであり、複数のバンクを同期して読み書きすることで高速化を図っている。ただし、メモリインターリーブとは包括的な概念であり、各バンクの読み書きは完全に同期している必要はなく、そこに多少のズレがあってもよいとされている。
****************************************

デュアルチャンネルという言葉はPCを自作しているとよく聞く言葉で、ATXと呼ばれる大きなPCの箱では一般的にメモリを挿せる場所が4つ搭載されていて、マザーボードの説明書をよく読むと「デュアルチャンネルを有効にするためには同じ規格のものを1番と3番に挿せ」などと書いてあったと記憶している。

当然マザーボードの仕様によってどこに挿すかなどが変わってくると思われるが、ざっくりデュアルチャンネルに合わせてメモリを挿すと2か所同時にメモリに対して読み書きできるようになるので、CPUの速度とメモリの読み書きの間に生じる時間差(これをレイテンシ:遅延と言うらしい)を少しでも埋めることができるということだと思われる。

ちなみにずいぶん昔、このレイテンシという言葉を知らずに意味を聞いたら「そんなこともわからないのか?」みたいなことを言われて結局教えてもらえなかったことを思い出す。

その時点でわからない単語など知りようもないのだが・・・知らないことが恥だというような姿勢は人の好奇心を根こそぎ奪ってしまうのでいくないっ( ゚Д゚)

ざっくりとしか知らないがレイテンシというのは結局のところ、速度差のある二つの装置が同時に動くときに、その速度差から生じる全体的な処理の遅れのことを言っていると思われる。(違っていたら指摘ください。)

ここで改めて解答群を見てみると・・・
****************************************
ア. 同一のバンクに連続してアクセスしたとき、アクセス時間を短くする。
イ. 同一のバンクの連続したアドレスにアクセスしたとき、キャッシュミス発生時のアクセス時間を短くする。
ウ. 一つのバンクが故障しても、システムが停止しないようにする。
エ. 複数のバンクに割り振った連続したアドレスにアクセスしたとき、アクセス時間を短くする。
****************************************

バンク、つまりメモリを小分けにした塊としてとらえた場合にメモリインタリーブを説明しているのは、「複数のバンクに割り振った連続したアドレス」つまり、「小分けにしたメモリに分散した一つの連なりになっている情報」もっと言うと、「メモリを2つに分けて、一つには『1234』もう一つには『5678』という情報を置いていた時に、『1~8』までの連続した情報」を取りに行った場合に、1個の塊から全部取るよりも速くなるよ、ということになる。
なので、答えは「エ.」が正しいことになる。「ア.」「イ.」については「同一のバンク」としているので概念そのものが違う。「ウ.」は全く違う概念(というかそういう技術があるのかも定かではないが)を指しているので違うと言える。

ちなみに英語でも色々と探したところ、以下のようなサイトがあって面白そうだったのでついでに紹介させていただきたい。

University of Maryland: Computer Science, 2003年春「カリキュラム:CMSC311」の授業ノートより
Interleaved memory

全部はさすがに見れていないが、コンピュータを一から作る(組み立てるとかじゃなく、ガチで作る)方法について説明している授業らしく、まったく意味はわからないが初めから見るととても面白そうである。

アメリカで大学生の授業を含めて受講して思ったのだが、アメリカの授業ではしっかりと初めから読んで行くと間違いなくわかるように授業やテキストが作られていることが多くて、「努力しさえすれば絶対にわかるようになっている」のがすごい。

日本の大学では初めから小難しい説明が書かれていることが多いため、挫折以前に考えることを放棄されてしまうことの方が多いのではないかと思う。
それこそ「レイテンシ」の話ではないが、「ついてこれる奴だけついて来い」みたいな上から目線で教える姿勢が日本の特に文系大学で学べる内容を陳腐化し、ともすれば不毛としか言いようのない学術論争に終始してしまっているのではないかと考えてしまう。

「アメリカはチャンスの国」だとかつて言われていたように思うが、「努力すればチャンスを作れる土壌」が整っている/いたからこその話だったのではないだろうか。

ちょっと自己主張してしまったが、今度時間に余裕があってその時にまだ興味があれば読んでみたいと思う。

2017年2月16日木曜日

アドレス指定方式: 間接アドレス指定

平成28年秋季 問9. 関節アドレス指定方式

問題文「間接アドレス指定方式のアドレス部で指定するものはどれか。」

解答群
ア. 処理対象データが格納されている記憶場所のアドレス
イ. 処理対象データが格納されている記憶場所のアドレスが格納されている記憶場所のアドレス
ウ. 処理対象データが格納されている記憶場所のアドレスとアドレス計算の基準点との差分
エ. 処理対象データ自体

今回改めて解くと正解した。冷静に考えるとなんとなく設問から答えが推測はできるけど、改めて考えてみる。

まずはグーグル先生に「アドレス指定方式」を聞いてみたところ、色々なサイトが紹介しているのはいつものことだ。

四コマで勉強する基本情報処理」さんでは、4コマでざっくりと解説した上で詳しく書いてくれている。が、多分何もわからずに詳細を見ると何が何だかわからないかもしれない。

『経営と情報』に関する教材と意見」さんは見た目非常に難しく書かれているが、ゆっくり追っていくとかなり細かいところまで書いてくれているのでお勧めである。

K-fix」さんは見た目が非常に綺麗に作られていて、視覚的にわかりやすい。しかし細かいところの理解と言う点では「『経営と情報』に関する教材と意見」には少しかなわないかもしれない。

全体的なお勧めは「『経営と情報』に関する教材と意見」さんと「K-fix」さんを見比べながら理解するのが良いのではないかと思う。

上記の解説を基に、解答群を見てみると、
ア.は直接アドレス指定
イ.は間接アドレス指定
ウ.はベース(基底)アドレス指定
エ.は即値アドレス指定
となっていて、正解はイ.となる。

詳細は自分でもこの記事を読み返しながら復習したいものの、まずは以下のように覚えたい。

まず、CPUの命令は「命令部」と呼ばれる命令を指定している部分と、「アドレス部」と呼ばれる指定した命令を実行する対象の部分とに分かれている。

この「アドレス部」に記述されている内容が何を指しているかによって「アドレス指定方式」と呼ばれるものが変わってくる、今回の問題はまさにその部分についての設問である。

即値アドレス方式というのは、アドレス部に「値そのもの」が入っているという意味になる。

直接アドレス指定は、アドレス部に入っている値が、メモリのアドレス番地を指しているという意味で、そのためアドレス部のビット数がそのまま指定できるアドレスの上限になる。
24bitだと16,777,215、つまり16メガビット相当しかメモリのアドレスを持てなくなるため、アドレス部の長さそのものが利用できるメモリの上限となる。
これは、64bitマシンが出てきて、理論的な上限がほとんどないに等しくなった今となっては少なすぎることはわかっていただけると思う。

間接アドレス指定は、アドレス部に入っている値が、さらにメモリのアドレス$20170216追記:を指定している場所$を指定しているため、直接アドレス部のような制限がなくなるという利点があるが、アドレス部に入っている番地を探し、さらにその番地に入っている番地に実際使う値があるという意味では2回以上メモリへのアクセスを必要とするため、実際にメモリアクセスにかかる時間はほかのアドレス指定方式よりも長くなると言える。

基底アドレス方式やインデックス方式は、基準となるアドレスに対してアドレス部の値を加算することで実際に利用する値が入っているアドレスを指定しているとざっくり考えた。基準の指定の方式が単純に違うものと思われるが、その点についてはまた後日ゆっくり考えたい。

今日は仕事が終わったのが23時すぎだったので、この辺で許してほしい。

2017年2月13日月曜日

ヒープソート

平成28年秋季 問6. ヒープソート

問題文「ヒープソートの説明として、適切なものはどれか。」

解答群
ア.ある間隔おきに取り出した要素からなる部分列をそれぞれ整列し、さらに間隔を詰めて同様の操作を行い、間隔が1になるまでこれを繰り返す。
イ.中間的な基準値を決めて、それよりも大きな値を集めた区分と、小さな値を集めた区分に要素を振り分ける。次に、それぞれの区分の中で同様な処理を繰り返す。
ウ.隣り合う要素を比較して、大小の順が逆であれば、それらの要素を入れ替えると言う操作を繰り返す。
エ.未整列の部分を順序木にし、そこから最小値を取り出して整列済みの部分に移す。この操作を繰り返して、未整列の部分を縮めていく。

まずもって名前を知らなければ解けない問題ではある。

まず「ヒープソート」から考えていくが、検索しても「与えられたデータをヒープ構造に追加していき・・・」とか書いてあって、

いやいや、ヒープってそもそもなんだ?( ゚Д゚)

と思ってしまうのは俺だけだろうか。

で、ヒープソートを検索していると次のYoutube動画を見つけた
ヒープソート byわくわくアカデミー

ヒープってなに?という疑問には答えてくれなかったが、女性の声が心地よかった。それと視覚的にこういう事するんだなぁということはわかった。

では、ヒープって何?ということで「ヒープとは?」でグーグル先生に聞いたところ、Wikipediaには以下のように書いてあるらしい。

ヒープ領域
******************************
ヒープ領域(heap memory)はコンピュータープログラミングにおいて、動的に確保可能なメモリの領域。ヒープ (heap) とは、『山積み』という言葉の中の『山』をさす英単語である。データ構造のヒープと直接的な関係があるかどうかは、ヒープ領域の構造の設計、保守にデータ構造のヒープの技術を使うかどうかに依る。
******************************

上の二つを組み合わせて考えると、スタックのような使い方をしているメモリ上で、大小関係を比較しながらメモリの最上位というか最下位というか端の方から取り出していきながらソート(並び替え)を行うということに見える。

プログラムを作ったらどうだろう?と言う風に考えたが、考えている内に頭がこんがらがってきたので予想だけすると、結局は以下のような形をした「完全二分木」と呼ばれる構造の上と左右をそれぞれ比較しながらソート(並べ替え)を行い、並べ替えが終わったら一番大きい(つまり一番上の値)を取り出して、1番下と交換し、またソートをし・・・
と言うのを繰り返すことで例えば大きい順に並べ替えを行うということだと思われる。


これを一列に並べ替えて、実際の操作を手作業で行ってみると


一番初めにHeap内を整理した後で、一番大きな値を取り除いて再度比較する際、入れ替わった場所だけ比較すれば良さそうなので、1回目と2回目以降のソートは別のループで実現するとわかりやすそうである。
また、2回目以降の操作は入れ替わった値のところだけを見ればよいので、文もそれだけ圧縮できるような気がする。

ここまで考えればなんとなく問題だけは解けそうであるw
今日はこのぐらいにしといてやるっ( ゚Д゚)

2017年1月29日日曜日

勉強中( ゚Д゚) 応用情報処理午前 平成27年秋季

前回、応用情報処理リベンジ試験を決めたので、12月21日から勉強を始めました。
ある程度自分の中で流れがつかめてきたので、状況を随時更新しながら進めていきます。
平成28年秋季についてはこちらで行っています: 応用情報処理午前 平成28年秋季
平成28年春季についてはこちらで行っています: 応用情報処理午前 平成28年春季

ブログ記事の先頭が「勉強中( ゚Д゚)」となっているものは今現在着手している過去問題で、「更新終了(*´▽`*)」となったら、次の試験に着手しているという約束事で動いていきたいと思います。

応用情報技術者試験ドットコム様の平成27年秋季試験を使って自習をします。
問の右側に書いている記号は以下のような意味を持たせています。
*************************
◎理解して正解した問題
○正解したが完全には理解していない問題
△不正解だったが、内容は理解している問題
×不正解で、理解していない問題
*************************

理解していないと思った問題は、調査の必要な文言を右側に記載してそれぞれに記事を作り、調査記事のリンクを貼っていきたいと思います。今後、一回調査した内容が出てきた場合も極力リンクを貼って解説できるようにしたいと思います。

2017/1/29
問1. ◎
問2. ○ ベン図
問3. ◎
問4. × パリティチェック
問5. ◎
問6. × アルゴリズム
問7. × JavaBean
167/165
勉強することが多い。。。

2017/1/30
問8. ○ パイプライン処理、分岐ハザード
問9. △
問10. × Memory Management Unit
問11. ◎
問12. ○ クラスタシステム
問13. ◎
問14. ○ システム信頼性設計
174/170
ちょっと忙しくてなかなか時間が取れない。。。

2017/1/31
問15. ○ システム稼働率(MTBF/BTTR)
問16. ○ プリエンプション方式
問17. × デマンドページング
問18. × ファイルシステム
問19. × コンパイラ
179/175
明日早いので・・・・ この辺で勘弁してやるっ( ゚Д゚)

2017/2/2
問20. × DSP
問21. ○ Pulse Width Modulation
問22. ○ NAND型RSフリップフロップ
問23. ○ 分周器
問24. × ニモニックコード
問25. ○ H.264/MPEG-4 AVC
185/180
今日は特殊対応で20時から働くので問題解くだけにしておく。

2017/2/4
問26. ◎
問27. ○ クラス図の多重度
問28. × 主キー
問29. × SQL構文
問30. ◎
190/190
貯金がなくなった。。。今日は忘れ物をして会社に戻り、遅くなってしまった。。。明日の俺がなんとかしてくれるさw

2017/2/5
問31. ◎
問32. ○ 最長一致検索(Longest match search)
問33. ○ MINE、S/MINE
問34. ○ ホストアドレス
問35. ◎
195/195
学習スケジュールが破たんしているw ・・・ので、今度の休みに見直しをすることにする。

2017/2/7
問36. ○ クロスサイトスクリプティング
問37. ○ タイムスタンプ
問38. × 共通鍵暗号方式
問39. × WPA2-PSK
問40. ○ 暗号方式
200/200
暗号方式は徹底的に弱い分野なので改めて勉強したい。また、攻撃手法については個人的にものすごい興味があるため、調査したい。

2017/2/8
問41. ○ Web Application Firewall
問42. ◎
問43. ○ デジタルフォレンジクス
問44. ○ セッションハイジャック、キーロガー、リプレイアタック
問45. ○ ペネトレーションテスト
205/205
聞いたことがあって、英語の意味だけで答えはわかるもののちゃんと勉強したいという思いが云々・・・

2017/2/11
問46. ○ Data Flow Diagram
問47. ◎
問48. ○ 2段階エディット法
問49. ○ eXtreme Programmingのプラクティス
問50. ○ 共通フレーム
問51. × 各種プロジェクトマネージメント
問52. ○ Earned Value Management
問53. ◎
問54. ○ ファンクションポイント法
問55. ○ インシデント管理におけるKPI
問56. ○ サービスレベル管理
問57. ○ 問題管理プロセス
問58. ○ 個別監査計画策定
問59. ○ 内部統制実施基準におけるIT業務処理統制
問60. ◎
220/215
休みを超えて、やはり休み間にやることが多いのと休みには気持ちが乗らないため、さっさと27年秋季を終えて毎日積み残した調査事項を行うことにした。

2017/2/12
問61. ○ Enterprise Architechture
問62. ◎
問63. ○ システム管理基準
問64. ○ ユースケース図
問65. ○ Request for Information, Request for Proposal
問66. ○ 環境表示ガイドライン
問67. ◎
問68. ○ デルファイ法
問69. ○ Sales Force Automation
問70. ◎
問71. ◎
問72. ◎
問73. ○ ロングテール理論
問74. ◎
問75. ○ Game Theory
問76. ◎
問77. ◎
問78. ◎
問79. ○ サイバーセキュリティ基本法
問80. × 電子計算機損壊等業務妨害罪
240/220
あまりカウントには意味がないが、まずは3期分を終えて調査が必要な内容について確認していきたいと思う。
最終的には問題慣れする必要もあるので、混合しながらやるのが良いようにも思うが、何しろ調査が必要な項目が多すぎるのでそちらに注力することにした。

2017年1月9日月曜日

勉強中( ゚Д゚) 応用情報処理午前 平成28年春季

前回、応用情報処理リベンジ試験を決めたので、12月21日から勉強を始めました。
ある程度自分の中で流れがつかめてきたので、状況を随時更新しながら進めていきます。
平成28年秋季についてはこちらで行っています: 応用情報処理午前 平成28年秋季

ブログ記事の先頭が「勉強中( ゚Д゚)」となっているものは今現在着手している過去問題で、「更新終了(*´▽`*)」となったら、次の試験に着手しているという約束事で動いていきたいと思います。

応用情報技術者試験ドットコム様の平成28年春季試験を使って自習をします。
問の右側に書いている記号は以下のような意味を持たせています。
*************************
◎理解して正解した問題
○正解したが完全には理解していない問題
△不正解だったが、内容は理解している問題
×不正解で、理解していない問題
*************************

理解していないと思った問題は、調査の必要な文言を右側に記載してそれぞれに記事を作り、調査記事のリンクを貼っていきたいと思います。今後、一回調査した内容が出てきた場合も極力リンクを貼って解説できるようにしたいと思います。

2017/1/9
問01. ◎ ビットの論理演算
問02. ◎ 進数の計算
問03. ○ M/M/1待ち行列モデル
問04. ◎
問05. △ スタック他
問06. ○ アルゴリズム
問07. × プログラム構造によって生じる性質
87/80
前のが多少生きているが、紙無しで勉強するのは無理がある・・・と言い訳してみる

2017/1/10
問08. × スタックポインタ
問09. ◎
問10. ○ USB規格
問11. ◎
問12. ○ クライアントサーバシステム
問13. × システムの構成
問14. ○ ライブマイグレーション
問15. ○ ネットワーク透過性
95/85
ある程度予想して正解しているが、復讐(≠復習)の意味を兼ねて〇にしてみた。

2017/1/11
問16. × フェールセーフ
問17. ◎
問18. △
問19. × ノンプリエンプティブ
問20. × 参照呼出しと値呼び出し
100/90
仕事終わったばかりで集中力ががが・・・

2017/1/14
問21. ◎
問22. ◎
問23. ◎
問24. ◎
問25. ◎
105/95
得意分野があるのか・・・・?1日全問正解は初めてのような気がする。

2017/1/15
問26. ○ ラジオシティ他
問27. ○ データベース設計:正規化
問28. ◎
問29. × データベース設計:主キー
問30. ◎
110/100
普通・・・コメントしづらいぐらい普通・・・orz

2017/1/16
問31. ◎
問32. ◎
問33. ○ OSI基本参照モデル
問34. ○ VRRP他
問35. × サブネットマスク
115/105
OSI基本参照モデルは何回でも復習したいところ。単に覚えられないということもあるが・・・w
VRRPは見ただけでVirtual・Redundant・Routerまで読めたので正解したが、聞いたこともない単語なので詳しく見てみたい。

2017/1/17
問36. ◎
問37. ○ 暗号方式
問38. ◎
問39. ◎
問40. × WAF
120/110
WAFだけでわかるかっちゅうねんっ( ゚Д゚)
丸覚えするから日本人が英語でけへんようになるんやっ ( ゚Д゚) とか言ってみる

2017/1/18
問41. ○ クロスサイト・リクエスト・フォージェリ
問42. ○ NISTによるクラウドコンピューティングの定義
問43. × SSH他
問44. ○ SMTP-AUTH
問45. ○ Man-in-the-Browser攻撃
125/115
ある程度確信をもって正解したけど、この辺の内容は実務とかでも役立ちそうなのでしっかり勉強したいところ。

2017/1/21
問46. ○ ソフトウェアの品質特性
問47. × モジュール結合度
問48. ○ 図式化手法
問49. ○ インスペクション
問50. ○ eXtreme programming
問51. ○ プロジェクトマネジメントオフィス
問52. ◎
問53. ◎
問54. ○ コストマネジメント
問55. ○ ITILにおけるサービスデスク
135/125
1日サボったので2日分。今日は休みでもあったため。
過去問を見ていくのはいいが調査案件が増えてきており、こちらの方の遅れを取り戻すのが急務と言える。

2017/1/22
問56. × サービスレベルマネジメント
問57. × ITサービスマネジメントの構成管理
問58. ◎
問59. ◎
問60. ○ 請負契約・外部委託契約
140/130
自分が今現在やっている仕事なのにサービスマネジメント・・・(;´Д`)
システム監査については何かキーワードが欲しい。上の問題は簡単すぎるというか常識的すぎるのと調べるキーワードが少なすぎる。と、思ったけど請負契約・外部委託契約などが適当か?

2017/1/23
問61. ◎
問62. ◎
問63. ○ Service Oriented Architecture
問64. ○ Omni Channel
問65. ○ 各Body of Knowledge
145/135
ここまで来ると正解率はだいぶ上がる様子。文脈から解ける問題が多いが念のため調査対象に・・・すると多くなるがしてみる。

2017/1/24
問66. ○ クラス図、コラボレーション図
問67. ○ マイケル・ポーターの競争戦略
問68. ◎
問69. ◎
問70. ○ 技術のSカーブ
150/140
ポーターはMBA受講していた頃にマーケティングの神ぐらいの扱いだったので覚えているが、復習のため勉強したい。

2017/1/25
問71. ○ コンカレントエンジニアリング
問72. ○ EDI
問73. ◎
問74. ◎
問75. ○ PM理論
155/145
・・・まーまー。。。 疲れていてコメントが浮かばない。

2017/1/26
問76. ◎
問77. × 損益分岐点
問78. ◎
問79. ◎
問80. ◎
160/150
損益分岐点計算で間違うのは恥ずかしい・・・ ので、一回復習しようw

2017年1月7日土曜日

勉強中( ゚Д゚) 応用情報処理午後 平成28年秋季

問題文はここから

平成28年秋季は受験しているので、答え合わせをしてみる。
決して時間がないことのいいわけじゃないんだからねっ( ゚Д゚)

問1.
<俺の解答>
設問1.
  1) ウ
  2) ア、イ
設問2. ア
設問3.
  1) 特徴点のみ漏えいしても元の指紋を再現できないため。
  2) d:他人受け入れ率、本人拒否率が最も低い
    e:従来のサーバを利用することによるセキュリティリスクを回避できる
    f:B

<模範解答>
設問1.
  1) 
  2) ア、イ
設問2. 
設問3.
  1) 特徴点のみ漏えいしても元の指紋を再現できないため。
  2) d:他人受け入れ率、本人拒否率が最も低い
    e:個人情報と指紋情報を物理的に分けて管理できる
    f:B


問2.
<俺の解答>
設問1. a. 書いてない
設問2.
  1) ウ. ペネトレーション
  2) 本部の情報に頼らず店舗でも情報収集と分析に努める。
  3) 顧客が商品を見る機会を増やし、加えて繁盛店である印象を与える事ができる。
設問3.
  1) ウ. ポジショニング
  2) 来店の少ない時間帯に配送を行えるか否か。
設問4.
  中高年者をターゲットにしたプロモーション

<模範解答>
設問1. a. 顧客単価を上げる
設問2.
  1) ウ. ペネトレーション
  2) 地域行事の情報を入手し、商品ごとの発注量を修正する。
  3) 目に留まる商品をついでに買っていくことによる売り上げの向上
設問3.
  1) ウ. ポジショニング
  2) 店舗の既存の人員で宅配が可能か。
設問4.
  中高年者に向けた広告を行う。

2017/1/7 本当は今日までに4問必要だけど今日はここまでにしといてやるっ( ゚Д゚)

2017/3/23 そして今日まで何もしなかったorz
もう試験も近いので、改めて午後の問題も見てみようと思う。

問9.
<俺の解答>
設問1.
  1) 開発を行うと期間が長く費用も高くなるため
  2) ウ. 業務プロセス
  3) 開発工数
設問2.
  1) 利用者側要員の関与を増し、適格な分析と業務への影響を把握するため
  2) 最適なパッケージの選定とアドオン機能の充実
設問3.
  1) ア. RFP
  2) 準委託
  3) 委託社員に対する直接の指揮命令を避ける

<模範解答>
設問1.
  1) A社の業務に精通しているから
  2) ウ. 業務プロセス
  3) 工数 又は 開発規模
設問2.
  1) ギャップを業務変更で対応した時の影響を正確に把握するため
  2) アドオンで対応可能かを正確に判断したいから
設問3.
  1) ウ. 発注先選定基準
  2) 準委任
  3) 作業者に直接業務指示をしない

問10.
<俺の解答>
設問1.
  1) 書いてない(写すのに疲れたと思われる)
  2) 書いてない
設問2.
  a. イ. CI
  b. キ. RFC
  c. ウ. CMDB
設問3.
  1) 書いてない
  2) 書いてない
  3) 書いてない

<模範解答>
設問1.
  1) アプリケーションはL社が提供するPaaSの範囲外であるから
  2) 障害復旧後にK社が行うアプリケーションの稼働確認
設問2.
  a. キ. RFC
  b. イ. CI
  c. ウ. CMDB
設問3.
  1) データの整合性を確保
  2) 試行、移行リハーサル
  3) 展開作業中に発生するインシデントに備えた切り戻し作業

問11.
<俺の解答>
設問1. 監査が行われる前に申請書と一致させることができる
設問2. エ.
設問3. 書いてない
設問4. b. 利用者ID棚卸リスト c. 利用ログ
設問5. エ.
設問6. 書いてない

<模範解答>
設問1. 承認済みID申請書がなく更新される場合
設問2. エ.
設問3. 利用者ID棚卸を実施した証跡が残らないから
設問4. b. 権限マスタ c. ID管理台帳
設問5. エ.
設問6. システム管理者の不正なアクセスが報告されない。

最後の方は疲れていたのかほとんど書いていないため、あまり参考にはならないが単語の記述をしているところは正答率が低く、やはり落ちるなりの理由があったと言わざるを得ない。

ではどうしたら試験に受かるようにしたら良いか?という点が残るが、せめて午後に受ける分野の用語には精通しないとそもそも確率が非常に低くなるのだけは否めない。まずは今行っている調査の対象を午後で選択するだろう問題群に集中させる必要があると思われる。

それとできるだけ直近の午後問題を解いて自分の知識が回答できるだけのものかチェックしたいと思う。

2017年1月6日金曜日

有限オートマトン

平成28年秋季 問4. 有限オートマトン

問題文「次の表は、入力記号の集合が{0、1}、状態集合が{a、b、c、d}である有限オートマトンの状態遷移表である。長さ3以上の任意のビット列を左(上位ビット)から順に読み込んで最後が110で終わっているものを受理するには、どの状態を受理状態とすればよいか。

Wikipediaによると、有限オートマトン(finite automaton: FA)または有限状態機械(finite state machine: FSM)とは、有限個の状態と遷移と動作の組み合わせからなる数学的に抽象化された「ふるまいのモデル」である。デジタル回路やプログラムの設計で使われることがあり、ある一連の状態をとったときどのように論理が流れるかを調べることができる。有限個の「状態」のうち1つの状態をとる。ある時点では1つの状態しかとらず、それをその時点の「現在状態」と呼ぶ。何らかのイベントや条件によってある状態から別の状態へと移行し、それを「遷移」と呼ぶ。それぞれの現在状態から遷移しうる状態と、繊維のきっかけとなる条件を列挙することで定義される。

このエントリーをはてなブックマークに追加
・・・・まあ、わからんくはないがもう少しわかりやすく解説できないものか?

「ふるまいのモデル」というのはかなり端的に特徴をとらえているように思える。
以前友人と「見えずの刃」というゲームを作成していた時に、以下のような図がプログラムを書く際に「今、自分が書いているコードがどの位置にあるか」を確認するのに非常に有益だというようなことを説明してくれた。

問題文のように全てが記号だとわかりにくいが、つまりある状態にあるときに受け取る内容が次の状態への行き先を決めることだということらしい。

では、わかりやすいように「0:いいえ」「1:はい」と置き換えて状態をあてはめてはどうだろう?

名付けて「一歩先に踏み出せない喪男」の有限オートマトンっ( ゚Д゚)

まず「a.嫁さんを探す。相手に彼氏はいないか?」で、「いる:いいえ」で次の相手を探す。つまり「a.」に戻る。「いない:はい」で状態は「b.声をかけて反応があるか?」となる。

状態「b.」で「ある:はい」であれば状態は「d.」に移行し、「ない:いいえ」なら状態は「c.」に移行する。

状態「d.」では食事に誘い、「はい:断られる」であれば誘い続ける、つまり状態「d.」を試行し続ける。対して「いいえ:断れない」であれば状態「c.」に移行する。

状態「c.」では一歩先に進み、付き合ってと言ってみる。「b.」で反応がない場合もダメもとで付き合ってくれ、と、この男は言ってみるようだ。
「断られない:はい」で状態「b.」に戻り、再度声をかけてみる。「断られる:いいえ」で次の相手を探すことになる。

状態「d.」では断られ続けるにも関わらず食事に誘い続けるのに、状態「c.」で諦めが早すぎるのは謎だ。
それと、状態「c.」で断られないのに状態「b.」に戻ってしまうのも喪男であるが所以なのかもしれないが謎である。

さて、ここで問題に戻ると、「110」で終わる状態は何か?ということになる。
上の例で考えてみよう。

状態遷移表?を見ると最後が0で終わるのは状態「a.」と「c.」のみである。そこでそれぞれについて、逆引きで考えてみる。

状態「a.」より逆引き:
状態「c.」から断られたから「a.」に来ている。しかし、状態「c.」が「1:はい」を受け取れる口はない。ので、状態「a.」が「110」で受け入れ状態になることは不可能そうだ。

状態「c.」より逆引き:
状態「b.」からでも「d.」でも「0」を受け取って「c.」に来ることは可能だ。
状態「b.」は、「a.」から「1」を受け取ることは可能だが、「a.」は「1」を受け取ることはない、つまり断られなかったら、他の女性を探す気にはならないそうだ。いいぞっ( ゚Д゚) その調子だ。

状態「d.」は、何回でも女性を食事に誘い、連れ出すまであきらめないつまり「1」を受け取れるし、状態「b.」で声をかけて反応があっても「1」を受け取れる。

つまり、「b.」⇒「d.」⇒「c.」、「d.」⇒「d.」⇒「c.」でも状態「c.」には行ける。この行動を続ければ断らない女性ならなんでも行ける彼であればすぐに嫁さんをもらえそうだが、なぜだか断らないからと言って次のステップ、例えば「手をつないでみる」とか「キスを迫ってみる」などの行動が起こせない彼は、行動が有限であるがためにこのループからは永遠に抜け出せない。。。

ちなみに喪男とは、毒男と区別して使われている用語のようだ。
毒男: 女性との接触を断つことにより高度に精神的変化を遂げた求道者
喪男: 喪男とは毒男の見習いのようなもので、学生、年齢の若い者、ポジティブな思考が残っているものはこちらに分類される。
(出典: アンサイクロペディア「毒男」より)

毒男を有限オートマトンで表現するとこのようなところか・・・

興味があろうがなかろうが、同じところに戻るところにネガティブさがうかがえる・・・

しかしこのモデルが完成された美しささえ醸し出しているように思えるのは俺の感覚がおかしくなっているからだろうか・・・

ということを時間をかけて考えていて悲しくなってしまった orz
このエントリーをはてなブックマークに追加

2016年12月26日月曜日

逆ポーランド表記法

平成28年秋季 問03. 逆ポーランド表記法

問題文「逆ポーランド表記法で表された式を評価する場合、途中の結果を格納するためのスタックを用意し、式の甲や演算子を左から右に順に入力し処理する。スタックが図の状態の時、入力が演算子となった。この時に行われる処理はどれか。ここで演算は中置表記法で記述するものとする。」



このエントリーをはてなブックマークに追加

ここで問題文にある逆ポーランド表記法その他の記述方式は以下の通り(Wikipediaより):
☆逆ポーランド表記法(後置法): 二つの演算の対象の後ろに演算子(+など)をつけて表記する
 ※1+2 ⇒ 12+ と表記される
 ※X=1+2 ⇒ X12+= と表記される
☆中置法: 通常の演算と同様に、演算の対象の間に演算子をつけて表記する。
 ※1+2 ⇒ 1+2
 ※X=1+2 ⇒ X=1+2
☆ポーランド表記法(前置法): 演算の対象の前に演算子をつけて表記する。
 ※1+2 ⇒ +12
 ※X=1+2 ⇒ =X+12???(ポーランド表記法については具体例が見つからず。。。

問題文以降出現するものが全て演算子だったと仮定し、「+、-、=」で入力されたとすると:
逆ポーランド表記法では「CD+」となり、これを中置法で記述すると「C+D」つまり「C演算子D」が答えとなる。

続いて「C+D」の結果がスタックに積まれ、その後に「-」が入力されるので:
逆ポーランド表記法では「B結果-」となり、中置法で記述すると「B-結果」となる。

さらに続いて「B-結果」の結果(便宜上「結果2」とする)がスタックに積まれ、「=」が入力されて:
逆ポーランド表記法では「A結果2=」となり、中置法では「A=結果2」となる。

最後に「=」が入力されて完結するため、全体を逆ポーランド表記法で表記すると:
ABCD+-=
となる???

これをさらに中置法で変換すると
A=B-(C+D)

逆にもっと複雑な式を考えてみると
A=(B+C)*(D+E) は逆ポーランド表記法でいくと
ABC+DE+*=

これを順にスタックに積むと
Cまで入った順でBC+が行われ結果1がスタックに積まれる。さらにDEがスタックに積まれてDE+が行われて結果2がスタックに積まれる。
さらに演算子「*」が入力され、スタックに残っている結果1と結果2が結果1結果2*で算出され、その結果3がスタックに積まれ、最後に入力される「=」で「A結果3=」が行われて結果3がAに代入される。

文章を中置法に置き換えると
(B+C)*(C+D)の結果がAに代入される ⇒ A=(B+C)*(C+D) となるので考え方としてはあってそうである。

ここで何故ポーランド表記法ではなく、逆ポーランド表記法ばかりが注目されるのか?という疑問と何故スタックと一対になって問題になったのか?という疑問が出てきて色々考えてみたところ、実際のメモリの使い方として利用されることが多いからか?と想像してみた。

メモリの使われ方がある基準点からどれだけ移動しながら使用するか?ということに着目した場合、逆ポーランド表記法の場合は一つ一つの演算対象と演算子の動きとメモリの利用状況が非常にわかりやすくなるからだと想像したのだ。

具体的に言うと
中置法: A=(B+C)*(D+E)
逆ポーランド表記法: ABC+DE+*=
これをメモリのスタックの状態遷移で考えてみるとわかりやすいかもしれない?

ABC+DE+*=
これを1ステップずつ考えてみる。ちなみにメモリのスタックは下に積まれる(メモリの基準点の先頭位置が一番上で、次の値が入った場合に基準点から1つずれたところに二つ目が入る)

1. A入力
Aは演算対象(オペランド)なので、メモリに記憶される:
*****メモリ*****
A
*****以 上*****

2. B入力
オペランドでメモリに記憶
*****メモリ*****
A
B
*****以 上*****

3. C入力
オペランドでメモリに記憶
*****メモリ*****
A
B
C
*****以 上*****

4. +入力
演算子(オペレータ)なので演算処理、2つ前のオペランドと1つ前のオペランドをオペレータに従って計算し、結果Xをメモリに格納
*****メモリ*****
A
X
*****以 上*****

5. D入力
オペランドなのでメモリに格納
*****メモリ*****
A
X
D
*****以 上*****

6. E入力
オペランドなのでメモリに格納
*****メモリ*****
A
X
D
E
*****以 上*****

7. +入力
オペレータなので演算処理を2つ前と1つ前のオペランドに行い、結果Yをメモリに格納
*****メモリ*****
A
X
Y
*****以 上*****

8. *入力
オペレータなので演算処理を2つ前と1つ前のオペランドに行い、結果Zをメモリに格納
*****メモリ*****
A
Z
*****以 上*****

9. =入力
オペレータの演算処理として、2つ前の値に1つ前の値を代入する。
*****メモリ*****
Z
*****以 上*****

結果としてオペレータ(=)までの算出結果をAに代入して演算を終わるため、増えたり減ったりしながらメモリの使用量を最小限に抑えつつ、コンピュータが理解しやすいように一つ一つの作業が簡潔に伝えられるからなのではないか?

この点についてはより深い勉強が必要だけど、とりあえずこんな感じで覚えてみた。


このエントリーをはてなブックマークに追加

勉強中( ゚Д゚) 応用情報処理午前 平成28年秋季

前回、応用情報処理リベンジ試験を決めたので、12月21日から勉強を始めました。
ある程度自分の中で流れがつかめてきたので、状況を随時更新しながら進めていきます。

ブログ記事の先頭が「勉強中( ゚Д゚)」となっているものは今現在着手している過去問題で、「更新終了(*´▽`*)」となったら、次の試験に着手しているという約束事で動いていきたいと思います。

応用情報技術者試験ドットコム様の平成28年秋季試験を使って自習をします。
問の右側に書いている記号は以下のような意味を持たせています。
*************************
◎理解して正解した問題
○正解したが完全には理解していない問題
△不正解だったが、内容は理解している問題
×不正解で、理解していない問題
*************************

理解していないと思った問題は、調査の必要な文言を右側に記載してそれぞれに記事を作り、調査記事のリンクを貼っていきたいと思います。今後、一回調査した内容が出てきた場合も極力リンクを貼って解説できるようにしたいと思います。

2016/12/21
問01. ◎
問02. ◎
問03. × 逆ポーランド表記法
問04. ○ 有限オートマトン
問05. × データ構造B木
問06. × ソート方法(ヒープソート
問07. ◎

2016/12/22
問08. ◎
問09. × アドレス指定方式
問10. × メモリインタリーブ
問11. ○ VLIW (Very Long Instruction word)
問12. △
問13. × 仮想サーバの冗長化設計
問14. ◎

2016/12/23
問15. × MIPS
問16. ○ ガーベジコレクション、その他メモリ配置
問17. × CPUの遊休時間
問18. ◎
問19. × ラウンドロビン方式
問20. ◎
問21. ◎

2016/12/24
問22. × 標本化周波数
問23. ○ 論理回路
問24. ◎
問25. × SMIL他
問26. ◎ ANSI/SPARC3層スキーマ
問27. ○ B+木インデックス
問28. ◎

2016/12/28
問29. ○ SQL文
問30. ◎
問31. ◎
問32. ○ ネットワークプロトコル
問33. ○ アドレスクラス
問34. × NAPT、IPスプーフィング、IPマルチキャスト、NTP
問35. × SOAP、CORBA、DCOM、SIP

2016/12/29
問36. × IPv6拡張ヘッダ
問37. × OP25B
問38. ○ チャレンジレスポンス方式
問40. × AES、PKI、RSA、SHA-256
問41. ○ リスクベース認証、RADIUS認証、二要素認証
問42. ○ 非接触型・接触型ICカード
問43. ○ ハイブリッド暗号方式

2016/12/31
問43. × SPF (Sender Policy Framework)
問44. ○ Security Information and Event Management、バインド機構、リバースプロキシサーバ
問45. × セキュリティ技術評価、ファジング他
問46. ○ ユースケース図他、UML、ソフトウェア要件定義
問47. ○ ソフトウェア方式設計・詳細設計? Javaのクラス定義他
47/45
一個ずれとる・・・

2017/1/1
問48. ◎
問49. ○ ソースコード変更波及解析、リファクタリング
問50. ◎
問51. ◎
問52. × 復習かねて、クリティカルパス
52/50
問題が文系に近くなってきた気がする・・・

2017/1/2
問53. ◎
問54. × PMBOKのリスク戦略
問55. ◎
問56. ◎
問57. ◎
問58. △
問59. ◎
59/55
この当たりになってくるとある程度確実に取れるようになってくるようだ・・・

2017/1/3
問60. ◎
問61. × SOA (Service Oriented Architecture)
問62. × バランススコアカード
問63. ○ OLAP
問64. ◎
64/60
SOAは前回試験時に勉強して忘れていた。バランススコアカードはMBAの人事の項目で勉強したことと少し違う様子・・・

2017/1/4
問65. × ソフトウェア製品の品質:非機能要件
問66. × 調達計画、実施における準委任契約と請負契約
問67. ◎
問68. × アンゾフの成長マトリクス
問69. ◎
69/65
マネジメント系がずたぼろな件・・・

2017/1/7
問70. × 死の谷
問71. △
問72. × クラウドソーシング
問73. ◎
問74. ◎
問75. ○ 故障率曲線
75/70
えらい数の調査件数に圧倒されるw

2017/1/8
問76. △
問77. ◎
問78. × 産業財産権
問79. × 特定個人情報の適正な取り扱いに関するガイドライン
問80. ○ 集団思考(グループシンク)
80/75
結構法令系は弱いことが判明orz

2016年12月20日火曜日

そして応用情報結果・・・

12月16日に合格発表がありました。

結果は残念ながら、不合格でした。。。

結果をしってから、ほとんど見られてはいないものの応用情報に関わるブログ記事をすべて消してなかったことにしようかとも思ったのですが、しばらく時間を置いて考えたところ・・・

これはネタとしておいしいっ( ゚Д゚)

と思いなおし、落ち着いてからこの記事をコーヒーを飲みながら書いているところです。

午前は67.5点、午後は48点と惨憺たる結果だったのですが、よくよく考えてみると午前が100点満点で70点に達していないということは、午後の結果が悪かったとしても仕方がないようにも思います。

午後についての対策について調査したところ、多くが「対策を練ることは毎年違う問題が出てくるので不可能」としているところもありましたが、それも少し違うような気がしています。

このエントリーをはてなブックマークに追加
言い訳みたいですが、午前の対策法が固まったのが1週間前だったこともあり、午後については過去問を見ることもなく試験に挑んだため、はっきり言って初めて経験する試験内容にしてはよくできた方だと言えるかもしれませんし・・・(と、前向きに捉えてみる)

今回の午後の解答の突合せは後日行おうと思いますが、私のような文系の人間がマネジメント系を中心に午後の試験を受けた場合、午前の問題の理解度がそのまま午後に影響すると思われます。(対してプログラマの方から見れば、プログラミングなどの問題は赤子の手をひねるようなものだと勝手な想像してみています・・・w)

つまり、問題に出てくる「Terminology」をしっかり理解し、且つ関連する用語がすぐに出てこなければ望ましい解答ができないと想定できるため、午前の理解度が7割以下だったことを考えると、午後の結果は妥当だと言わざるを得ないわけです。

応用情報処理技術者の資格そのものは、それほど仕事そのものに直接的な影響を持たない方も多いかもしれませんが、私の場合は受託契約の内容見直しの根拠にできたり、将来的に「中小企業診断士」の資格を狙っていきたいと考えているため、今回の結果を受けた結論は明確です。

リベンジだっ (# ゚Д゚)

それと、今回受験して感じたのは応用情報処理技術者試験の範囲を学ぶことで、少なくとも私のようにトラブルシューティング系の仕事をしている人にはかなりの好影響があるということです。

試験の範囲はハードウェアやソフトウェア、データベースやネットワークなどなどかなりの広範囲になりますが、1次受けのトラブルシューティングもどんな問題が来るかあらかじめわからないために、問題の切り分けを行う上で広範な知識を必要とします。

そういった意味で、基本情報や応用情報処理の学習は特にトラブルシューティングの1次受けをする人にとってはかなり有効なトレーニングになりえるとも言えるのではないでしょうか。

さて、そこでリベンジ方法なのですが、この記事を書いているのが2016年12月19日で、平成29年春季試験は2017年4月16日に行われます。

事情により起算日を12月21日として考えると、

日数にして 116日
週にすると 16週

となります。

私の仕事スケジュールは週5日間を派遣の仕事、残り2日の内1日は保育園のサポートの仕事、そして休みの日の3時間程度母親との打ち合わせや動画編集(母親とのプロジェクトは「Youtubeの最新動画:料理番組プロジェクト」と「実家の角島での起業計画プロジェクト」の二つとなります)で、結構タイトな中で時間を捻出しなければなりません。

逆に、試験の午前問題は80問、午後は5問をそれぞれ2時間半で解く必要があります。

今回の結果と事前の準備について経験からすると、試験対策は過去問題を解くことが一番効果が高いと思えます。なのでただひたすら午前の問題を解き、わからなかったものについては知識をつけていく方法が有効と考えました。

午前の問題は1つにつき1.875分(≒1分52秒)で解く必要があり、こちらは1問当たりの時間が短いので、毎日の学習で少しずつやっていくのが適していると思います。
毎日数問かを解きながら、わからないものの内解説を読むだけで足りないものについては時間を取って調査をする必要があると考えています。

午後については、本来はデータベースなどの勉強もしたいところですが、私のような文系人間がゼロから始めるととても時間が足りなくなるため、午後の問題は

必須の「情報セキュリティ
それとマネジメント系の「経営戦略」、「プロジェクトマネジメント」、「サービスマネジメント」と「システム監査」(書いてて恥ずかしくなってきますがw

これらに的を絞って対策することにします。

午後の問題は1問当たり30分割り当てになりますが、30分で見積もると時間が足りなくなる可能性もあるため、20分で解答するようにし、解答後に時間をかけて模範解答との突合せを行った方が良いと考えます。

上述の条件を踏まえてシミュレーションすると、
午前対策については1日を完全に休みにし、且つ1日を午後対策と午前の分からなかった問題の調査に充てると

116-16x2=84 (日)

毎日5問を最低基準にすると試験日までに420問、試験回数に換算すると5回分と少しの過去問題を見ることができるので対策としてはある程度納得できるものと思えます。
予想では5問で大体30分程度かけて問題を解いて解説を読み、わからないものは休みの日の調査に回すことができるのではないかと見積もっています。

午後については毎週1回のみ、1問20分かけて2問解き、模範解答との突合せと調査で全体2時間の見積、それと午前の対策の内、わからないものの調査に1時間を充てて計3時間学習するとすれば午後対策は

16x2=32 (問)

試験回数に換算すると6回分と少しの過去問題を見ることができるので、こちらもある程度納得のいくものになると思います。

調査の内容や進捗などについてはこのブログで上げていきたいと思います。まあ、見る人も少ないとは思いますがwww

有言実行できるか否かもですが、上述のようなやり方で資格が取得できるかというまあ、検証と言う名のネタになれればと思います。

良かったらまた来て見てくださいね(*´▽`*)
このエントリーをはてなブックマークに追加

2016年10月5日水曜日

2進数表現(負数の表現)

2の補数について

2進数の補数には、1の補数と2の補数という表現方法があるそうです。

1の補数は桁内の最大数を基準とした方法で、2の補数は桁内の最大数+1を基準値とした方法ということだそうです・・・
これだけで理解しろと・・・?

8ビットで1の補数を解説すると、

11111111 ・・・ 8ビットで表現できる最大の数値

これで-12を表現したいとすると、最大の数値から12を引くことで表そうということなので、

 11111111
- 00001100
⇒11110011 ⇒ これを-12とする、というのが1の補数の考え方

同様に8ビットで2の補数を解説すると、

11111111+1を最大値として表現するので、
100000000 の9ケタで表現しますよっと

  100000000
- 000001100
⇒011111111 - 000001100 + 1 ・・・ 100000000を011111111と1に分解すると全桁反転させて表現できる
⇒011110011 + 1
⇒011110100
⇒9ビット目は仮に存在する桁なので、11110100が-12を表現することになるということだが、今いち意味が分からない・・・www

つまり、上の解説は1の補数、2の補数の考え方を述べているだけで、実際の数字を表す手法の解説ではないということを念頭に置かなければならない・・・と、こう考えることができるのは次の解説でわかる。

「最上位ビットで正・負の判断を・・・」

8ビットで正負両方の数を考えた場合、最上位8ビット目を正負の符号と考え、0の場合は正、1の場合は負とする。そのうえで、表現できる数を簡単な一覧にすると

01111111 ・・・ +127
01111110 ・・・ +126



00000011 ・・・ +3
00000010 ・・・ +2
00000001 ・・・ +1
00000000 ・・・ 0
11111111 ・・・ -1
11111110 ・・・ -2
11111101 ・・・ -3



10000000 ・・・ -128

この表現方法で表現できる数値の範囲は$-2^{n-1}$~$2^{n-1}-1$となる。nに8を代入すると$-2^7$~$2^7-1$で、-128~127となり上の表と合致する。

逆に符号が正の場合は単純な加算処理を行えば表現している数字はわかる。

たとえば、「00001100」は最上位ビットが0なので正であり、4の桁($2^2$)と8の桁($2^3$)を足した値、つまり10進数で「12」を表しているとみることができ、

符号が負の場合は最上位ビットを除くビットが表現している値から、与えられている桁数の最大値を引くことで表現している数字がわかる。

たとえば「10001100」は最上位ビットが1なので負であり、4の桁($2^2$)と8の桁($2^3$)を足した値、つまり10進数で「12」から最大値「128」を引いた「-116」を表していることがわかる。

参考書はここでまとめとして、3つの負数を表現する方法の違いを述べている。

1.符号と絶対値 ⇒ 最上位ビットを符号とし、それ以外は絶対値で表現する
2.1の補数
3.2の補数

・符号と絶対値及び1の補数の場合、表現できる範囲が ($-2^{n-1}-1$)~($2^{n-1}-1$)
・符号と絶対値及び1の補数の場合、2つの「0」が存在する

・2の補数で表現できる範囲は($-2^{n-1}$)~($2^{n-1}-1$)
※2の補数を用いることで、減算を負数の作成と加算処理で行えるため、ハードウェアの演算回路を単純化できる

・・・ つまりここまで言ってたことは、ハードウェアの演算回路を単純化するために考えられた表現方法だったということか・・・・ 早く言ってほしいwww

しかし、ここまでで全743ページ中22ページしか進んでいない orz
根本的な考え方を変えないといつまでたっても終わらないな・・・

2進数表現(正の整数)

今日は・・・皆大好き2進数 (*´▽`*)

<この記事で覚えるべき内容1>
2進数で正の整数を表現する時、一番右のビットの右側に小数点を置く(正の整数なので当たり前だが・・・)固定小数点表現を用いる・・・とある。

わざわざまどろっこしい言い方しなくてもよさそうなものだけど、確かに小数点は固定されてる・・・というか正の整数なのに小数点いらない気もしなくはない・・・

表現できるビット数(n)に対して、 $2^n$ 通りの数の表現が可能となる。

で、表現される最小の数は「0」であり、「0」もビットを消費するので最大の数は「$2^n-1$」となる。

かつて高校生だった時にこの手の表現はいや程見てきたけど、結局嫌気がさした一番の原因は「こまかっ( ゚Д゚)」というところではなかろうか。

真剣に考えてみるととても当たり前だし、大人だからそこが「大きな差」を生むと思えるが、若い時分に $2^n-1$ と $2^{n-1}$ の違いなどどうでも良い気がするし、それぐらいだったら可愛い若い女の子を見ていた方がいいというのも納得できる。
そちらの方がとても大事だ・・・

だが俺は今試験勉強している結構なおじさんなのでわかるっ( ゚Д゚)

「『0』が一つの数字として存在するから表現できる数は『$2^n$』から『1』を引いた『$2^n-1$』である」とっ( ゚Д゚)
・・・俺って相当頭悪かったんだな・・・www

ここで重要な公式が突拍子もなく出てくるのはいつも通り
2進数を10進数に変換する公式だっ ( ゚Д゚)

$$a_m×2^m+a_{m-1}×2^{m-1}+…+a_0×2^0=\sum_{k=0}^m a_k\cdot 2_k$$

そうだね・・・ 掛けて足せば出るよね・・・ で、「2進数⇒10進数の求め方」と書いてあるが、正確には10進数のd乗を2進数で表すためには何桁必要かを求める式が以下。
だいぶ端折ってるなwww

$$10^d-1\approx2^n-1$$
$$10^d\approx 2^n$$
ここで両辺の対数を取ると
$$\log_{10}10^d\approx\log_{10}2^n$$
$$d\cdot log_{10}10\approx n\cdot \log_{10}2$$
$$d\approx n\cdot \log_{10}2$$

かつて対数の勉強をしていた時に常々思っていたのだが、「何故対数を使うのか?」という点は俺が本当に意味を理解していなかったことを如実に表しているように思う。
そのころの先生は教えてくれようとしていたのだとは思うが・・・ 俺は女の子に夢中だったっ( ゚Д゚)

まず、対数を取る:べき乗の計算を行う ⇒ 元の数字とは関係のない数字になる: $10^d$ は $\log_{10}10^d は数字としては全く違うもので、「d」乗の数値だけを取り出して計算しやすくしているだけになる。

上の例では、「10」を底に取った対数を両辺で表していて、それがほぼ同じになることを利用して、「10」のd乗は2進数のn乗になるのか?を解いている。

対数に関しては別途項目を割いているようなので、そこで改めて勉強しよう・・・

しかし3分の2ページでこれだけのことを表現しようとするとは・・・ 参考書恐るべし

2016年9月10日土曜日

r進数

前記事の「Bloggerで数式表示」で書きましたが、2016年10月の応用情報処理技術者試験を職場の友人にたぶらかされて受験することになってしまいました。

基本情報処理技術者試験はだいぶ前に取ったのですが、私の本職はプログラマでもないので特にそれ以上取ろうという気もあまりなかったのですが・・・・

私の経験上、こういう系統の試験は勉強した端から忘れてしまうので、書き留めながら勉強するという意味と、落ちて次回受ける時(受かりたいですが・・・)にまた一からやり直しにならないように備忘録的に書き込んでいきたいと思います。

今回はr進数です。

<記事ここから>
買った参考書が難しすぎるのか、僕の理解力が少ないのかはわからないですが、精読しないと訳がわからないことが多すぎるのがこの手の試験参考書だったりします。

例えば・・・
「有限個の記号を使って無限個のものを識別しようと考えられたのが10進数に代表されるr進法です。r進法では、0~(r-1)までのr個の数字をある規則に従って並べることで無限の数を表すことができます。」
みたいな感じです。

上の内容を僕なりに解釈すると
「10進数が世の中では一般的に使われているが、別にそれにとらわれずr個の記号で数を表すことができる。例えば
10進数は『0,1,2,3,4,5,6,7,8,9』の10個の記号を使って数を表すことができるが、別にそれにとらわれることなく『a,b,c』の3つの記号を使ったって構わない。
ちなみに上の三つの記号を使って0~9の数字を表すと

a, b, c, aa, ab, ac, ba, bb, bc

と表すことができる」

簡単になっているのか・・・・?(ノД`)・゜・。

ここで、上の例でいう「abc」を基数(radix)と、言うそうな

で、10進数Nを「a」を基数とするr進数で表現すると

<この記事で覚えるべき内容1>
N(10) = am×$r^m$+am-1×$r^{m-1}$+・・・+a1×$r^1$+a0×$r^0$+a-1×$r^{-1}$+・・・+a-m×$r^{-m}$

と表現できる・・・のだそうだ・・・長い・・・

まあ、つまり各桁の数字(r)を各桁の重み(累乗)で掛けて足すとわかる・・・とこのようなことらしい。

ここで、上の知識で解ける過去問を一つ


上の問題を逆に解釈すると、2進数の有限小数表現ができる、つまり2進数で表しても無限に終わらないようにならない奴を除外すれば良いので

$2^0=1$
$2^{-1}=0.5$
$2^{-2}=0.25$
$2^{-3}=0.125$

なので、
ア. $0.375=0.25+0.125=2^{-2}+2^{-3}$ で表現可能
イ. $0.45=0.25+0.2$ で「0.2」は表現できなそう・・・
ウ. $0.625=0.5+0.125=2^{-1}+2^{-3}$ で表現可能
エ. $0.75=0.5+0.25=2^{-1}+2^{-2}$ で表現可能

つまり答えはイ.となる。


ここで参考書は16進数の元の数字を16倍すると桁上がりすると突拍子もなく言ってくる。つまり・・・

<この記事で覚えるべき内容2>
16進数の 「$6B.5$」 を16倍すると 「$6B5$」 と小数点が右に一個ずれる
2進数の 「$1011.11$」 を2倍すると 「$10111.1$」 となる、とこう言うことだそうな。
これは当たり前のようにも見えるが、おそらくこれを必要とするような問題が出てくるんだろうな・・・

<この記事で覚えるべき内容3>
10進数をr進数に直す方法は以下のような方法だそうな・・・

例えば10進数「603」を16進数に直すには

16 ) 603

16 )  37 ・・・余り11

16 )   2 ・・・余り5

         0 ・・・余り2

余りを下から並べると、「$25B$」となる。これは別に8進数であろうが4進数だろうが同じらしい。
しかし・・・なぜだろう・・・ 気になると放置できん・・・

逆に10進数に戻してみよう・・・

16進数の「$25B$」は、
$2*16^2+5*16^1+11*16^0=2*256+5*16+11=512+80+11=603$

あ・・・つまり10進数に戻す方法を逆にしてるのか・・・って当たり前かww

この内容で解ける問題を・・・

26 ) 123

26 )    4 ・・・余り19

           0 ・・・余り4

4は「E」、19は「T」になるので、答えは「ET」のエ.となる。

<この記事で覚えるべき内容4>
10進数をr進数に変換する時、小数部分の計算は<内容3>とは逆に掛けていけ・・・だと・・・?

少数「0.75」を2進数に変換
$0.75*2=1.5$ ・・・この繰り上がった1が小数点以下1桁目、まだ少数になっている0.5を
$0.5*2=1.0$ ・・・繰り上がった1が小数点以下2桁目で、2進数表記の「0.75」は

$0.11$

となる。

16進数に変換したとすると・・・・
$0.75*16=12.0$ つまり「0.C」で表される・・・だとぅ・・・・?

「1」を「16」で割ると「0.0625」で、「12」をかけると・・・「0.75」 おぉ・・・( ゚Д゚)

今日はこの辺にしておいてやる・・・( ゚Д゚) ・・・あれ・・・なんかまだ書いてある (ノД`)・゜・。

<この記事で覚えるべき内容5>
「(3n+1)進数で表された3の倍数の各桁の総和は3の倍数になる」
うるせぇっ 丸覚えしてやる (ノД`)・゜・。

今日はこの辺で・・・
この調子で試験に間に合うのか??