HOME»基本情報技術者試験掲示板»パーフェクトラーニングより
投稿する

パーフェクトラーニングより [5232]

 まきさん(No.1) 
対策問題①の問17より
DNSのセキュリティ対策の問題で
設問
選択肢の(三)のR社の権威DNSキャッシュサーバはわかるのですが、
(四)のZ社のDNSサーバが正解なのが問題文から読み取れません。

このDNSサーバと権威サーバの仕組みを知っておいた方がいいのでしょうか
アクセスする者がサーバでドメインをやり取りするというくらいしか分かっていません
解説お願いいたします。

解説  *** 応用情報ドットコムより引用 *** 

Y社員がR社URLにアクセスする
      ↓
ブラウザがIPアドレス解決のため、Z社DNSサーバへキャッシュを送る依頼する
      ↓
Z社のDNSサーバはキャッシュがあればブラウザに返す。無ければキャッシュを反復問い合わせしてR社の権威サーバから得られた結果ブラウザに返す
      ↓
ブラウザは受け取ったIPアドレスにアクセス
2023.12.31 01:07
電タックさん(No.2) 
FE ブロンズマイスター
書籍を持っていないので書籍が要求している必要知識はちょっとわかりませんが、個人的には引用で引っ張ってくださっている内容の理解で十分だと思ってます。
2023.12.31 10:16
 まきさん(No.3) 
>電タックさん
ありがとうございます。
2023.12.31 11:06
 まきさん(No.4) 
続きまして
問11
マージソートの問題
問題そのものはH16年春  午後問4よりです。
マージソートの解答群で
a_yet = true or b_yet = true(エ)が答えなのですが

なぜそうなるのでしょうか解説お願いいたします。
https://www.fe-siken.com/pdf/archive/2004h16h_fe_pm_qs.pdf
問題引用元問題はP15からP18になります
2023.12.31 11:33
boyonboyonさん(No.5) 
FE シルバーマイスター
a_yet = true or b_yet = trueの間は、
output[]に代入するデータがまだ残っています。
(yetなので)
a_yet = false and b_yet = false
になると代入するデータがなくなるので、loopを抜けます。
2024.01.01 12:08
 まきさん(No.6) 
>boyonboyonさん
a_yet = true and b_yet = trueの場合
2回目の時に比較対象が無くなってしまい比較できなくなるため
a_yet = true and b_yet = trued では不可になるということでしょうか

トレースをしようとしてもこの問題どうしたらトレース出来るのか分かりません
2024.01.03 20:56
 まきさん(No.7) 
22行目と25行目で
a_yet <- false
b_yet <- false
になるためウのa_yet = true and b_yet = true
は出来ないということですか
2024.01.03 20:59
電タックさん(No.8) 
FE ブロンズマイスター
選択肢の意味はboyonboyonさんが答えてくださっている内容が全てなのでもう解決してるかもしれませんが、ちょっと整理したほうが理解の助けになると思います。

a_yetがtrueもしくはfalseというのはどういう状態の時を表すのでしょうか?
また
b_yetがtrueもしくはfalseというのはどういう状態の時を表すのでしょうか?

これが2点整理できればP16.(a)に入れるべきループ(P2.■ー■は繰返処理を表す)の条件がエである必要が見えてくると思います。
2024.01.04 11:02
boyonboyonさん(No.9) 
FE シルバーマイスター
この投稿は投稿者により削除されました。(2024.01.04 17:29)
2024.01.04 17:29
boyonboyonさん(No.10) 
FE シルバーマイスター
この投稿は投稿者により削除されました。(2024.01.04 17:51)
2024.01.04 17:51
boyonboyonさん(No.11) 
FE シルバーマイスター
No.9の書き込みは、長すぎたので書き直しました。

具体的にトレースしてみます。(2回併合済み)
比較に使うのは、temp[]とoutput[]の後半です。

output[]={2,5,6,7,1,3,4,8}
temp[]={2,5,6,7}

最初にoutputの動きを書くと
1:output[0]←output[4] なので、output[]={1,5,6,7,1,3,4,8} 
2:output[1]←temp[0] なので、output[]={1,2,6,7,1,3,4,8}
3:output[2]←output[5] なので、output[]={1,2,3,7,1,3,4,8}
4:output[3]←output[6] なので、output[]={1,2,3,4,1,3,4,8}
5:output[4]←temp[1] なので、output[]={1,2,3,4,5,3,4,8}
6:output[5]←temp[2] なので、output[]={1,2,3,4,5,6,4,8}
7:output[6]←temp[3] なので、output[]={1,2,3,4,5,6,7,8}
8:output[7]←output[7] なので、output[]={1,2,3,4,5,6,7,8}
になります。tempを使わないとうまくいきません。

代入する要素が、tempになるか,outputの後半になるかを決めるのは
設問のaからbの間の処理になります。

まず、a_yet,b_yetで代入する要素が残っているかどうかを判断します。
a_yetとb_yetの場合分けですが、
①:a_yet=true and b_yet=true  ・・・両方残っている。比較して代入。
②:a_yet=true and b_yet=false  ・・・tempだけ残っている。
③:a_yet=false and b_yet=true  ・・・outputの後半だけ残っている。
④:a_yet=false and b_yet=false  ・・・どちらも残っていない。終了。
の4つの分岐になります。

①②③を合わせて、
a_yet=true or b_yet=true・・・a
になります。
①の場合
tempとoutputの後半の対象要素を比較して
  temp≦outputの後半ならば
    tempの代入
  それ以外は
    outputの後半の代入
②の場合
    tempの代入
③の場合
    outputの後半の代入
1つの代入が終わったら、outputの代入する場所を1つ後ろにずらします。
write_idx=write_idx+1・・・b

④は上記のループには入りません。

ここで、①②③の処理を見るとtempとoutputの後半の代入が2回ずつ出てきます。
記述を1回で済ませるために、条件を調整します。
tempの代入になる場合は、「②」と「①の中でtemp≦outputの後半になる場合」です。

問題に合わせて書くと、
「②」= 「(a_yet=true and) b_yet=false」・・・()内は省略可
「①の中でtemp≦outputの後半になる場合」
=「a_yet=true and b_yet=true and temp≦outputの後半」
となります。

outputの後半の代入になるのはそれ以外です。

問題では、これらを配列の添数を使って表しています。

こんな感じです。いかがでしょうか。
2024.01.04 17:51
 まきさん(No.12) 
>電タックさんの
a_yetがtrueもしくはfalseというのはどういう状態の時を表すのでしょうか?またb_yetがtrueもしくはfalseというのはどういう状態の時を表すのでしょうか?
boyonboyonさんの説明で
a_yetとb_yetがtrue=代入要素がある
a_yetとb_yetがfalse=代入要素がない
ということが分かりました

>boyonboyonさん
詳しい解説ありがとうございました。
最初にoutputの動きを書くと                  0  1   2 3 4 5 6 7            0 1 2 3
1:output[0]←output[4] なので、output[]={1,5,6,7,1,3,4,8}    temp[]={2,5,6,7}
         1         1

    
2:output[1]←temp[0] なので、output[]={1,2,6,7,1,3,4,8}     
         2       2 
3:output[2]←output[5] なので、output[]={1,2,3,7,1,3,4,8}
         3         3 
4:output[3]←output[6] なので、output[]={1,2,3,4,1,3,4,8}
         4         4
5:output[4]←temp[1] なので、output[]={1,2,3,4,5,3,4,8}
         5       5
6:output[5]←temp[2] なので、output[]={1,2,3,4,5,6,4,8}
         6       6
7:output[6]←temp[3] なので、output[]={1,2,3,4,5,6,7,8}
         7       7  
8:output[7]←output[7] なので、output[]={1,2,3,4,5,6,7,8}
         8         8

outputの要素かもしくはtempの要素があれば代入される?
(a_yet)                   (b_yet)
だからa_yet=true or b_yet=true  となる

a_yet=true and b_yet=trueの時はoutput,tempの両方に代入要素がないと実行されないから不可なのでしょうか
2024.01.05 16:57
 まきさん(No.13) 
>a_yet=true and b_yet=trueの時はoutput,tempの両方に代入要素がないと実行されないから不可なのでしょうか 
間違えました。

場合分けで①②③を合わせて、
a_yet=true or b_yet=true・・・a

>②と③はこれで分かりますが
①のa_yet=true and b_yet=trueがa_yet=true or b_yet=trueに含まれるとは分かりにくいです。すみません
2024.01.05 17:10
 まきさん(No.14) 
この投稿は投稿者により削除されました。(2024.01.05 19:47)
2024.01.05 19:47
 まきさん(No.15) 
あとすみません誤植を見つけたのですが
19    output[write_idx]<-temp[a_idx-span_idx]
20    a_idx<-a_idx+1
21    if(span_idx + span_size /2 <= a_idx)
22    a_yet <- false
23    else
24    output[write_idx]<-output[b_idx]
      b_idx<-b_idx+1 (表記がない)
25    b_idx <- false
      ( b_yet <- false)が正しいのか

25行目はb_idxではなくてb_yetの表記が正しいと思いますが・・・
私が何か間違っているのでしょうか? 
問題をただ抜きだしてきたような気がするのですが?
2024.01.05 19:49
boyonboyonさん(No.16) 
FE シルバーマイスター
>①のa_yet=true and b_yet=trueがa_yet=true or b_yet=trueに含まれるとは分かりにくいです。
ベン図をかくと分かりやすいです。

>25    b_idx <- false
>     ( b_yet <- false)が正しいのか
パーフェクトラーニング持ってないのですが、
平成16年春を参照するならば、
23    else
24      output[write_idx] <- output[b_idx]
        b_idx <- b_idx+1
        if(b_idx≧span_idx + span_size){
          b_yet <- false
        }
になると思います。
2024.01.06 16:19
 まきさん(No.17) 
>boyonboyonさん
再度ありがとうございます。
プログラムが実行されて、
22行目か25行目にa_yetもしくはb_yetがfalseになるため

17行目にループで戻った時に、
ウのa_yet=true and b_yet=trueでは実行されない

エのa_yet=true or b_yet=true
ならばa_yet=falseもしくはb_yet=falseでも実行される

という理解で宜しいでしょうか。

これが標準問題で難しいとまだまだ練習が必要ですね
2024.01.06 16:58
boyonboyonさん(No.18) 
FE シルバーマイスター
>・・・という理解で宜しいでしょうか。
だいたい大丈夫かと思います。

No.5にも書きましたが、補足です。
and と or きちんと押さえておいた方が良いと思います。
この問題では、
エ:a_yet = true or b_yet = true
とは、いわば継続条件です。(VBAではwhile)
対して、
ア:a_yet = false and b_yet = false
とは、終了条件です。(VBAではuntil)
アとエは、お互いに相手の補集合になっています。(継続U終了=全体)
どちらもループの条件として使えます。
・・・not(a_yet = false and b_yet = false)としてアを使う。

イ:a_yet=false or b_yet=false
ウ:a_yet=true and b_yet=true
イとウも、お互いに相手の補集合になっています。
ウは、継続条件に漏れがあるためループの条件不足です。①
イは、継続・終了どちらも含まれているためループの条件にはできません。②③④

問題によっては、ループの条件分岐が、イとウになる場合もあります。
2024.01.06 18:46
返信投稿用フォームスパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop