ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

ユークリッド整域における元と高さの関係

先日に書いた記事「ユークリッド整域の素元分解可能性について自分なりに補足」で


つまりH(x) = 0のところにx = 0が、H(x) = 1のところに単元のxが、H(x) = 2のところに単元と素元のxが、H(x) > 2のところに単元、素元、いくつかの素元の積がすべて分布してる感じですね。


と記述しました。

「単元と素元~」みたいな言い方をANDと解釈するなら間違いですが、まあORと解釈するなら間違った主張ではないんですけどね。

ただ、たとえばH(x) = 2のところに単元または素元のxが分布しているという主張ですが、これは正しくはH(x) = 2となるxについて、それは単元または素元である、という主張にするべきでした。

前回の言い方だとH(x) = 2となるxが必ず存在するかのような主張となっています。


そして、その他の点でも非常にナンセンスな表現であるということに気が付きました。
後述しますが、まず単元はそんな色んなところに分布してなくて、すべて同じ高さのところにあります。

あと、前述のようにORで解釈するなら間違いではないのですが、この主張を読んだときにイメージするのはH(x) = 2のところに素元となるxがあって、H(x) > 2以降において素元の積のxも含まれてくるという感じだと思います。

そのイメージは間違いですが、主張自体は間違いではないので、たしかに読み手が悪いと言えばそうですが、私の書き方にも問題があると思いました。


それは、1という数、2という数を定数として決定してしまっているところです。
実際は定数は決定せずに、色々な元に対する高さの大小関係だけをイメージしてもらえるような書き方にするほうが自然でした。

事の発端はYahoo!知恵袋で、整数に関数Hを導入したときに、H(x) = |x|ではなくH(x) = 2×|x|とすることも可能である、という指摘を受けたことでした。

このときH(x) = 2のところに単元があって、H(x) >= 4以降に素元などがあり、あとH(x)が奇数であることはありえません。

こんなように、定数はまったく変わってくるわけですが、大小関係は変わりません。
そこで今回は、元による高さの大小関係に着目して判明することを書いていきたいと思います。

続きを読む

tag: 数学 群環体 ユークリッド 考察 勉強 関係 素数 証明 写像 帰納法

C#の独自ソートで順序関係を壊す

今回C#の記事ではあるんですが、実質的には特定のプログラミング言語に依存しない話です。
そして数学の順序関係からヒントを得ています。


さて、C#ではIComparer<T>インターフェースを実装するクラスを定義し、Compareメソッドを実装してやることにより、
リストのソートなどで要素同士を比較するときに使うメソッドをカスタマイズできます。

しかしながら、ふと思ったのですが、どのようにこのCompareメソッドを実装してもいいわけではなくて、書き方次第では正常にソートできなくなってしまうのではないかということが、

まあ考えてみれば当たり前のことではあるのですが、ピンときたわけであります。


たとえば、以下のようなコードを書いてみます。


class WrongComparer : IComparer<string> {
  public int Compare(string x, string y) {
    return 1;
  }  }

これは常にxがyより大きいことを意味しています。

ここでstringのリストlistで、list.Sort(new WrongComparer())を実行してみました。


すると例えばlistが { "Red", "Green", "Blue" } だったとき結果は { "Blue", "Green", "Red" } と逆順になりました。

MSDNによるとSortメソッドは要素数が16個より小さい場合は挿入ソートを使用するそうですので、もし一番後ろの"Blue"から入れ替えを始めていたとしたら、

最初は"Blue"が配置されて、次にCompare("Green", "Blue") == 1より"Blue"の後ろに"Green"、次にCompare("Red", "Green") == 1より"Green"の後ろに"Red"という感じで、順番がひっくり返るのもうなづけますね。

続きを読む

tag: C# リスト ソート 数学 順序 関係 クソ記事 クイックソート

順序集合を並べるアルゴリズム

たいした内容ではないのですが、また数学のネタです。

今日は脳みそのコンディションが悪いので、読むに耐えないクソ記事になっているかもしれないですが…。

半順序関係が与えられた集合に対して、その半順序関係の情報に基づいて一列に並べるアルゴリズムについて考えていました。

その集合は“有限”の集合であると但し書きしないといけませんね。
なんか全部、有限であることが前提みたいに考えてしまうのは、情報系の人間の悪い癖だと思います。


さてしかし、普通、全順序関係じゃないと一列に並べられないんじゃないかということなのですが、

ここでは任意の元x,yについて、x <= yという順序関係があるとき、yは必ずxの右(上でもいいからとにかく大きい側の方向を定める)に来るという条件を充足するように、半順序集合の全ての元を一列に並べることを、一列に並べることとします。


つまり、大小比較できない二つの元については、どんな順番でもいいから無理やり一列に並べて、
大小比較できる二つの元については確実に、大きい元が大きい側になるように並べるということです。


このような一列を生成するアルゴリズムを、考えたわけなのですが、アルゴリズム自体はクソ簡単なものです。

そもそも私は難しいアルゴリズムを考案できるほどの脳みそがないので…。

続きを読む

tag: 数学 集合 順序 関係 アルゴリズム 計算 帰納法 証明 地図

数学の勉強について雑記…

今回の記事は本当に雑記です。
話を体系的に書くという意識がまったく感じられないものであります。

つまりはクソ記事であるということをご承知ください。


私は最近、数学が好きなので、数学の特に数学基礎論という部分について勉強したり考え事していたりするのですが、

…もしかして自分には数学の才能がないのではないかと思ってしまいますね。


まず数学において重要な、発想力が私は大きく欠如していますね。
だから証明しろとか言われても、どのようにすればいいのかわからない。

答えを見ずに自分の力でなんらかの知見を生み出すことができないのは、数学をやる人間としてどうかという感じですね。

無から何かを探すというのは、すごく考えのフィールドが広すぎて、探索しきれないということですね。

まあ、このフィールドの広さの中で知見を生み出すためには、問題を小さく分割してちょっとずつ考えて、
小さな結論をひとつずつ出していって、最後に大きな結論を出すというのが必要になると思うんですが、

なんか私の場合、大雑把になってしまうということですね…。
たぶん、脳のワーキングメモリが足りないので、細分化しても忘れちゃうんですね。

全体を一気に考えないと頭の中のイメージが崩れてしまうというか。
でも、全体を一気に考えるなんて、大きすぎて出来ないということです。

さらに、有限のものに対してはイメージできるとしても、無限のものはイメージ出来ないので、苦手ですね。

たとえば数学的帰納法とかも、苦手です。


さて一方で、すでに答えが書かれてあるときに、答えを読んで理解する力というのは、まあまあかなと思うのですが、

それでも理解力も足りないと、思ってしまいますね…。

いや、なんというか書かれてあるイメージが、日本語に書き下せる場合と、日本語にできない場合があると思うんです。

日本語で考えられるものであればわりと理解できるんですが、日本語にできないものは苦手ですね。
イメージをイメージのままにして考える力がないんですかねぇ…。

続きを読む

tag: 数学 集合 順序 関係 論理学 述語論理 公理 勉強 偉人 ワーキングメモリ

続・集合と写像の勉強まとめ ~ブール代数も~

前回記事「集合と写像の勉強まとめ」で、“関係”というものについてまで書きたかったのですが、
疲れて打ちきってしまったので、今回さっさと書いてしまいます。

また、あのあと“ブール代数”とは何かについても勉強したので、それも書きます。

と言っても、ブール代数の定義を見ただけで、使い方とかはまだなので、何なのかよくわからないままなんですけどね。

さて、この記事は前回記事を読んでいることを前提に書きますので、ご注意ください。
続きを読む

tag: 数学 論理学 集合 写像 関係 グラフ 述語 演算 ブール代数

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。