- PR -

アルゴリズム

投稿者投稿内容
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-03-10 16:50
ども、がるです。雑談モードです :-P

> アルゴリズムも大切ですけど
> 他の方も言われているとおり、必要になってからでいいんじゃないかなーなんて思ってみます。
んと、半分賛成で半分反対かなぁ?
きちんと習得するのは確かに「必要になってから」でよいとおもうのですが。
問題が一つあって、「知らないと"必要なときに"、"必要であることが"
認識できない」ケースがあるのが半分反対の理由でし。
なので、周囲にきちんとした先輩とかがいれば、安心して後回しでよいと
おもうのですが。そういった良質な「外部ユニット」がいなければ、
自己判断のためにもアルゴリズムの本の「斜め読み」くらいはしておいた
ほうがよいと思うです。
# 昔は大抵周囲にウィザードがいたものですが :-P

> #最近、自分が今まさに書いているソースコードの意味を理解していない初心者が多いと思う。
うみうみ。確かに。
怖いのが「鵜呑みにしていればいい」って言い切っちゃう先輩達の
存在ですね。そうやって「悪習」が継承されていく…。

アルゴリズム、大切ですねぇ。個人的にはシミジミそう思います。
「言語の枠を超えた」或いは「言語以前の」プログラミングへの考え方
をきちんと学んでいくのはとても重要だとおもいます。

というか今の「便利な機能」はバックボーンに古いアルゴリズムが
存在しているので、新しいものを学ぶためにも、古いアルゴリズムを
学んでおくことには意義があるとおもいます。
まさに「温故知新」ですね。

ちなみに、アルゴリズムをやるなら個人的にはC言語で一度ちゃんと
やっておくべきだと思います(もっと本音はマシン語)。
理由は簡単で「便利な関数/API/クラスがほとんど存在しないから」。
それこそ「マシン語レベル」できちんとアルゴリズムを把握しておくと、
便利な言語での学習も深くなると思います(早いか、は別 :-P )。
# Javaとかの「便利な」言語の1APIが、裏では「かなり重い」ってのは
# ありがちな話で。
# バックボーンがある程度把握できると、大雑把な軽重はイメージ
# できるようになるです。

そうそう。
アルゴリズムと聞いて思い出した1例。
コード:
if (a != b) {
  a = a xor b
  b = a xor b
  a = a xor b
}


さてなにをしてるでしょう?
回答方法は「がるに電波を飛ばす」 :-P
正解者にはもれなく「がるの心の中での拍手」が与えられます(笑

# 昔マシン語で四則演算とか考えさせられたなぁ、っと(笑
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-03-10 16:52
引用:

 であれば、SQL(使ってもSELECT,FROM句のみ)を一切使わずに
 システム構築するといいかも。


DBMSを使わずにファイルだけで作ってみるとか、、、、、これは力がないとできないですね。
複数アクセスとかをうまくやれたら自分でDBサーバ作れますね

_________________
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-03-10 17:30
ども、がるです。引き続き雑談モ〜ド(笑
引用:

CHNさんの書き込み (2004-03-10 16:52) より:
DBMSを使わずにファイルだけで作ってみるとか、、、、、これは力がないとできないですね。
複数アクセスとかをうまくやれたら自分でDBサーバ作れますね


んと、理想的な返しとしては「シンプルな機能でもいいので作ってみると
いい勉強になりますよね」。

現実的な悲劇としては、CGIとかで
「データの検索あるんだけどDBないからよろしく〜」と
クライアントに一言で片付けられる瞬間。
…結構色々検索条件があったりして泣けるときがあります。
複数項目一致(andありorあり)だけならいざ知らず、Group by相当の
機能から各種項目選択でのソートまで。
いくつか事情があってバークレイDBが使えなかったので、ずいぶん
ヘビーなものを作った記憶があります ^^;

そういえば、別件で「DBMSじゃ速度が遅すぎるから、機能はシンプル
なんだが速度の出るDB作って」といわれて作ったことも。
…スレッドとプロセス周りの概念をいやっちゅ〜ほど理解できました(苦笑

はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-03-10 18:06
はにまるです。
引用:

がるがるさんの書き込み (2004-03-10 16:50) より:
アルゴリズムと聞いて思い出した1例。
コード:

if (a != b) {
a = a xor b
b = a xor b
a = a xor b
}


さてなにをしてるでしょう?


答えを出した時はすんげー!と感動しましたが、
理屈がわかりません、今日は寝れそうも無い。

ポイントは、1つ目の結果Aとメボシは付けたのですが、

 「全ビット1」と「B」の排他論理和は、「Bの反転ビット」ですよね...
 「全ビット0」と「B」の排他論理和は、「全ビット1」ですよね...
 「A」と「B」の排他論理和は、何だ?

ヒントを頂けないでしょうか?

追記:
 よくよく、考えたらそこが解っていれば、
 直ぐにがるがるさんの質問の答えが解るんですよね..
 もうちょっと頑張って見ます。


[ メッセージ編集済み 編集者: はにまる 編集日時 2004-03-10 18:15 ]
たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2004-03-10 18:35
引用:

はにまるさんの書き込み (2004-03-10 18:06) より:
 「全ビット0」と「B」の排他論理和は、「全ビット1」ですよね...


ちがいますよぉ
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-03-10 18:39
unibon です。こんにちわ。

引用:

がるがるさんの書き込み (2004-03-10 16:50) より:
そうそう。
アルゴリズムと聞いて思い出した1例。
コード:

if (a != b) {
a = a xor b
b = a xor b
a = a xor b
}




#チャチャですが言語がチャンポンになっているような。
なお、実際にやってみて動作は分かるのですが、なぜこれでできるのかが分かりません。

ちなみに、私が最近、感服したアルゴリズムは、
http://www.nminoru.jp/%7Enminoru/diary/2003/09.html#2003-09-11
です。


#あとで URL を修正しました。

[ メッセージ編集済み 編集者: unibon 編集日時 2004-03-10 18:42 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-03-10 18:41
がるがるさん、電波飛ばしてみましたけどどうでしょう。

初めのif文の条件 a != b、これがヒントですね。
なんでこの条件の時だけ処理しているかという・・・

>はにまるさん
2回同じ値でxorをすると元に戻るというのがポイントでしょう。

C言語にxorはないですね。
無月 重造
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 67
投稿日時: 2004-03-10 18:54
引用:

なちゃさんの書き込み (2004-03-10 10:28) より:
一昔前では(といってもその人の環境によりますけど)、ある程度のアルゴリズムは自分で実装する必要があったり、データ構造も自分で考えたり一般的な構造を自分で実装したり、ということが多かったので、そういったものを扱う場合には結構実装までできるレベルの知識が必要だったりしました。
今では、基本的な(というか通常いかにもよく使われるような)アルゴリズムやデータ構造は、標準的なライブラリで提供されることが多くなっています(もちろん環境によりますが)。
なので、現在はどちらかというと、あることをしたいときに、どのアルゴリズムやデータ構造を用いればよいか(ライブラリで提供されているどの機能が利用できるか)、あるいは独自に作成する必要があるか、といったことを判断するための知識として必要だと思います。



昔のことをよく思い出してみると、確かに自分もアルゴリズムをしっかり使ってました。
最近はWindowsべったりな開発(というよりVSべったりな開発)だったもんですっかり失念してましたが、普通のCでプログラムを書いていたころには備え付けのqsortを使うのがいやでmargesortとかbubblesortとかを手で書いていましたね。いや、懐かしい・・・(汗

引用:

一郎さんの書き込み (2004-03-10 18:41) より:

C言語にxorはないですね。



たしか「^」がANSI C準拠のXORだった記憶があります

[ メッセージ編集済み 編集者: 無月 重造 編集日時 2004-03-10 19:00 ]

スキルアップ/キャリアアップ(JOB@IT)