- - PR -
アルゴリズム
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-10 19:00
どもです。何通か電波が飛んできてる(笑)がるです。
先ほどのアルゴリズムです。 んと、言語については「特定の言語を意識せずに」かいてます。 !=が微妙かなぁとは思ったのですが、<>とかnot = よりは 一般的に通用するかなぁ、とか思って!=にしました。 xorという演算子自体は、たしかにCにはないですね。Cだと^が 演算子になるですね。 他の言語だと…忘れてるなぁ(笑 で、ヒントを。 if内の一行目の a = a xor b ですが、aに入るのは「aとbのxor」です。ここはこれ以上細かく 追求せずに次の行を考えてみると…少し進むと思います ^^ ヒント2。 (x xor y) xor z == x xor y xor z == x xor (y xor z) ヒントにならないヒント? そういえば、昔マシン語で、メモリのクリアによく以下の ロジックをつかってました。マシン語的にコストが安いので :-P メモリ = メモリ xor メモリ # 正しくはアキュムレータ相手に「アキュムレータの内容をxor」ですが :-P ----------- この辺のアルゴリズムって「今は別にいらないジャン」とかいわれる のですが。 例えば「桁数が極端にでかいので、16ビットの数値の四則演算よろ」と いわれたときに ・面倒だなぁ ・え?? どうやって作るの??? のいずれに自分がなりたいか、ってあたりを考えると結構重要 だと思ってます。 基礎とその応用。いずれも大切だなぁと感じる今日この頃。 | ||||||||
|
投稿日時: 2004-03-10 19:06
unibon です。こんにちわ。
少し分かりました。ということは、xor 以外、たとえば、
でも良いですよね(言語は Java 系を想定)。 でもこれだとネタバレ感があり、トリッキーじゃなくなってしまう。 #って、なぜトリッキーを目指す? >私 | ||||||||
|
投稿日時: 2004-03-10 19:11
ちょっとまった 「全ビット0」と「B」の排他論理和は、「B」では? | ||||||||
|
投稿日時: 2004-03-10 19:13
見ました。なんていうか先人の知恵ですねぇ。ちと感動しました。 そういえば、この辺の「メモリ削減系アルゴリズム」は、ゲーム 屋さんが結構持ってることが多いような。 メンテナンス性との兼ね合いもあるのですが、リソースを可能な限り 削る手法はある程度までは我々業務系の人間にとっても重要 なように思えます。 逆に、ゲーム屋さんは我々の「メンテナンス性の高い」ものの 作り方が重要になってきているそうです。 | ||||||||
|
投稿日時: 2004-03-10 19:14
>はにまる様
1ビット単位で考えるとわかりやすいと思いますよ if (a != b) { a = a xor b − (1) b = a xor b − (2) a = a xor b − (3) } (1)時での組み合わせは4通り 0 Xor 1 = ■ 1 Xor 0 = ■ 0 Xor 0 = ■ 1 Xor 1 = ■ それにたいして(2)を行うと 0 Xor 1 = ■ Xor 1 = ■ 1 Xor 0 = ■ Xor 0 = ■ 0 Xor 0 = ■ Xor 0 = ■ 1 Xor 1 = ■ Xor 1 = ■ また(3)では 0 Xor 1 = ■ Xor ■ = ■ 1 Xor 0 = ■ Xor ■ = ■ 0 Xor 0 = ■ Xor ■ = ■ 1 Xor 1 = ■ Xor ■ = ■ [ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2004-03-10 19:16 ] | ||||||||
|
投稿日時: 2004-03-10 19:26
objectです。
で良いのではないでしょうか? | ||||||||
|
投稿日時: 2004-03-10 19:47
どもも、がるです。
です。 ただ、四則演算とビット演算ではビット演算のほうが「コストが安い」 処理になるので、昔は「ビット演算で出来るなら四則演算は使わない」 っていうのがありまして、こんな風になりました。 以上余談でした〜 | ||||||||
|
投稿日時: 2004-03-10 20:10
であるのですが、同時にa=bの場合は正しくない結果になるということで、最初の条件は必須だったりします。 で、よく知ってる人にはその条件だけでわかったりしますね… | ||||||||
