2012-07-05

http://anond.hatelabo.jp/20120705023743

自己評価自分でも高いかいかよく分からない。

問題を他人に押し付けられる感じが嫌なんだよね。

まったりと、自分の好きな課題だけに取り組んでいきたい。そういう風にして生きている。

プログラミングも同じで、自分の作りたいものだけを作って生きている。

それともう一つ不満なのは(或いは『自分に合ってない』と表現した方が適切なのかも知れない)、洗練されたデータ構造設計必要性が問題中に殆ど出現しない所。

これは多くの言語に対して同じ問題を提供するには仕方のない事かも知れない。でも個人的にはそれが不自由で仕方がなかった。

例えばC++における純粋仮想関数インターフェイス)と継承を使った下記の様な「木」を表現した構造、まず出てこないでしょ?C++ではなくCならswitchテーブルを使った再帰関数で実現する必要があるし、これが言語間で共通な問題を隔てる原因にもなっている。

struct interface_tree{
    virtual double eval() const = 0;
    virtual std::size_t subtree_num() const = 0;
    virtual interface_tree *subtree(std::size_t) = 0;
    virtual ~interface_tree(){}
};

// expression tree, add
struct tree_add : public interface_tree{
    tree_add(std::size_t n, interface_tree **t){ subtree_[0] = t[0], subtree[1] = t[1]; }
    virtual double eval(){ return subtree(0)->eval() + subtree(1)->eval(); }
    virtual std::size_t subtree_num() const{ return 2; }
    virtual interface_tree *subtree(std::size_t i){ return subtree_[i]; }
    virtual ~tree_add(){ delete subtree_[0]; delete subtree_[1]; }
    interface_tree *subtree_[2];
};

// expression tree, sub
struct tree_sub : public interface_tree{
    tree_add(std::size_t n, interface_tree **t){ subtree_[0] = t[0], subtree[1] = t[1]; }
    virtual double eval(){ return subtree(0)->eval() - subtree(1)->eval(); }
    virtual std::size_t subtree_num() const{ return 2; }
    virtual interface_tree *subtree(std::size_t i){ return subtree_[i]; }
    virtual ~tree_add(){ delete subtree_[0]; delete subtree_[1]; }
    interface_tree *subtree_[2];
};

// expression tree, value
struct tree_val : public interface_tree{
    tree_val(double n_) : n(n_){}
    virtual double eval(){ return n; }
    virtual std::size_t subtree_num() const{ return 0; }
    virtual interface_tree *subtree(std::size_t i){ assert(0); }
    virtual ~tree_add(){}
    double n;
};

// ...
記事への反応 -
  • プログラミングは好きです。アルゴリズムや数学の勉強も好きなので「アルゴリズムイントロダクション」や「プログラミングコンテストチャレンジブック」なども読みました。 更に昔...

    • 俺はプロコンに参加するの好きだけど、そういう理由で参加したくないというのはときどき見る でも、そういう人、◯◯において自分は誰にも負けないとかいうのがあるのかな、って思...

      • 自己評価は自分でも高いか低いかよく分からない。 問題を他人に押し付けられる感じが嫌なんだよね。 まったりと、自分の好きな課題だけに取り組んでいきたい。そういう風にして生き...

        • いや、再帰は使わんと思うぞ・・・Stack Over Flow対策があるから自前で再帰は展開するぞ。 それに 問題を解くためにバイナリーツリーを使うことはあっても、バイナリーツリーを使う問...

          • いや、再帰は使わんと思うぞ・・・Stack Over Flow対策があるから自前で再帰は展開するぞ。 「Cならswitchテーブルを使った再帰関数で実現する必要がある」に対するレスなんだろうけど、...

            • いや、ごめん。再帰というのは、木構造による再帰、でも、Switchによる再帰でも同じ。そのアルゴリズムで Call命令を使うのか?って事。 あとCでもswitchが嫌で かつ 再帰によるCall命...

        • 自分の好きな課題のほうが、「どうせ追い抜かれるか、上には上がいる」って感じがするけどなあ。まあ人それぞれか。 洗練されたデータ構造が必要な問題は出るよ。大半の人が解けな...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん