忍者ブログ
2ヶ月弱で情報処理試験・ソフトウェア開発技術者に合格します。
★RSS 1.0  ★RSS 2.0
Posted at 2024.04.27,Sat
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Posted at 2007.10.16,Tue
ええと、苦手というか実務経験の無いデータベースの午後対策として、SQL全般を少し押さえておきたいと思います。ただ、私の場合、趣味程度にはさわったことがありますので、基本中の基本? SELECT とかは無視して進めます。

まずは、よく使われそうな関数から。

AVG, COUNT, MAX, MIN, SUM
 構文:SELECT 関数 ( フィールド ) ...
 意味:指定されたフィールドに対する演算結果を取得する

平均・出現数・最大・最小・合計 という単純なもの。

次に、関数と合わせて使うことで効果的なもの。

GROUP BY
 構文:SELECT ... FROM ... WHERE ... GROUP BY フィールド
 意味:指定されたフィールド単位でまとめる

HAVING
 構文:SELECT ... FROM ... WHERE ... HAVING 条件式
 意味:条件式に応じた結果のみにフィリタリング

例えば、
 SELECT 名前, SUM(点数) FROM 試験結果 GROUP BY 名前 HAVING AVG(点数) >= 50
とすると、平均点が 50点以上の人の名前と合計点数が表示される、って感じですね。

次に、条件に指定する部分のキーワード。

IN
 構文:SELECT ... WHERE フィールド IN (値1, 値2... 値N)
 意味:指定したリストに存在するもののみ抽出

BETWEEN ... AND ...
 構文:SELECT ... WHERE フィールド BETWEEN 値1 AND 値2
 意味:指定した値の範囲内のものを抽出

LIKE
 構文:SELECT ... WHERE フィールド LIKE パターン
 意味:指定したパターンとマッチング


最後は、SELECT 文の結合に関するもの。

UNION, UNION ALL, INTERSECT
 構文:SELECT ... 結合 SELECT ...
 意味:UNIONは重複データを省いた和集合。
   :UNION ALL は単純な和集合。
   :INTERSECT は重複データを省いた積集合。


ええと、一個忘れてました。

DISTINCT
 構文:SELECT DISTINCT フィールド ...
 意味:重複する値を除く

こんなものでしょうか。

他にも、CONCATENATE だとか色々有りますが、サーバによって構文が異なるものが大半なので、問題には出なさそうです。
PR
Posted at 2007.10.11,Thu
午後対策として、過去問 を解きました。 H19春試験の午後I。
解答にかかった時間は1時間半なので、まぁまぁ、余裕なのですが、弱点が結構ありますね。

問1:ネットワークは自前で構築した経験が有るので余裕
問2:OOP ですが、まぁ簡単ですね
問3:署名に関する部分が怪しかったです。要復習
問4:設備に関する問題。計算問題の前提条件が曖昧。引っかかりました。
問5:アルゴリズム?最後の問題の設問自体の意味が分からず。
問6:DB。MAXやSUMなど、分からないことだらけ。

というわけで、たぶん不合格。対策としては、
・文章を良く読むこと!!
・DataBase の命令や関数は一通り覚える
の2点ですね。
Posted at 2007.10.09,Tue
ええと、ヒープソートです。

実は、一度書いたのですが、ヒープソートのメリットが全然活かせてなかったのでボツにしました。

ちょっと勘違い。

ヒープの構築(2分木の作成)と要素の取り出しを繰り返せばヒープソートだと思ってたのですが、毎回 木全体を作り直してしまうと遅いですよね。

というわけで、やり直しです。

  001: var count = 10;
002: var nums = new Array(count);
003:
004: // 適当な数値で初期化 ( 重複OK )
005: if (var c = 0; c < count; c++) {
006: nums[c] = Math.floor((Math.random() * 100) % 100);
007: }
008:
009: // ヒープ構造の初期化
010: for (var c = Math.floor(count / 2); c >= 0; c--) {
011: heap(c, count);
012: }
013:
014: // 入れ替え&ソート
015: for (var c = count - 1; c >= 0; c--) {
016: var x = nums[c];
017: nums[c] = nums[0];
018: nums[0] = x;
019: heap(0, c);
020: }
021:
022: // 特定のノード以下の木構造を再構築
023: function heap(node, cnt) {
024: var p = (node + 1) * 2 - 1;
025: if (p > cnt) return;
026:
027: if((nums[node] < nums[p]) &&
028: ((p == (cnt - 1)) || (nums[p] > nums[p + 1]))) {
029: // 左側の葉と入れ替え
030: var x = nums[p];
031: nums[p] = nums[node];
032: nums[node] = x;
033: heap(p);
034: }
035: else if (((p + 1) < cnt) && (nums[node] < nums[p + 1])) {
036: // 右側の葉と入れ替え
037: var x = nums[p + 1];
038: nums[p + 1] = nums[node];
039: nums[node] = x;
040: heap(p + 1);
041: }
042: }


最大値となる根を抜き出した後は、ヒープの末端の葉を正しい位置に入れてあげればOKってことですね。ヒープを全て作り直すのとは、速度は大きく違いますね。

0
1
2
3
4
5


0


1
2


3
4
5


ソートを試してみる
Posted at 2007.10.05,Fri
今回は、クイックソートです。
よく利用しますが、あまり組むことは少ないですよね。

  001: var count = 10;
002: var nums = new Array(count);
003:
004: // 適当な数値で初期化 ( 重複OK )
005: if (var c = 0; c < count; c++) {
006: nums[c] = Math.floor((Math.random() * 100) % 100);
007: }
008: qsort(0, count - 1);
009:
010: function qsort(r1, r2)
011: {
012: // 終了条件:ソート対象の要素が1つ
013: if (r1 >= r2) return;
014:
015: // 軸を適当に選ぶ(ここでは先頭)
016: var pivot = nums[r1];
017: var pos = r1;
018:
019: for (var c = r1 + 1; c <= r2; c++) {
020: // 軸を基準に分割しながら、軸が有るべき位置を見つける
021: if (nums[c] < pivot) {
022: pos++;
023: var x = nums[c];
024: nums[c] = nums[pos];
025: nums[pos] = x;
026: }
027: }
028:
029: var x = nums[r1];
030: nums[r1] = nums[pos];
031: nums[pos] = x;
032:
033: qsort(r1, pos - 1);
034: qsort(pos + 1, r2);
035: }


0
1
2
3
4
5


 ソートを試してみる
Posted at 2007.10.05,Fri
さてさて、挿入ソートです。

  001: var count = 10;
002: var nums = new Array(count);
003:
004: // 適当な数値で初期化 ( 重複OK )
005: if (var c = 0; c < count; c++) {
006: nums[c] = Math.floor((Math.random() * 100) % 100);
007: }
008:
009: for (var c = 0; c < count; c++) {
010: for (var n = 0; n < c; n++) {
011: if (nums[c] < nums[n]) {
012: // 挿入する。
013: var x = nums[c];
014: nums[c] = nums[n];
015: nums[n] = x;
016: }
017: }
018: }

言語的に 挿入 というイメージがつかみにくいかもしれません。

もし、JavaScript の Array クラスがもう少し高機能であれば、もう少し違った書き方が出来ると思いますが、C言語でも同じ感じなので仕方ないですね。

0
1
2
3
4
5


 ソートを試してみる
Welcome ...

 
Ad.
Profile
名前:たびと。
職業:元腐れプログラマ

Template by mavericyard*
忍者ブログ [PR]