ブログ「サイバー少年」

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

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

数学やってる奴やはり計算速い説

夏休み、なかなか更新がなくて、久々に更新されたと思ったらクソ記事ばかりで申し訳ない。。。

大学で数学科に行っている人とか、なんらかの形で数学と関わっている人は、門外の人からコンピュータのように“数値計算の速い人間”というイメージを持たれてしまいがちですが、
実際は大学以降の数学なんて計算じゃなくて論理を扱う学問なので、計算速くねえんだよコノヤロッと我々は全世界に向けて言いたい、というのが定説です。


しかし、ふと思ったのですが、やはり大学以降の数学に関しても数学やってる奴は計算速いという説を提唱したいと思います。

二つの根拠があります。


ひとつは、計算速いというのは、ここでは数値計算、つまり自然数、整数、有理数(場合によっては実数全体)に対する四則計算や累乗する、累乗根をとるなどの計算において高速に答えを出せるという意味にしますが、

数学でここらへんの代数系の性質を学んだ人は、結合法則、分配法則、指数法則などなど、色々な計算を簡略化する法則を知っているので、それを活用して素早く答えを出せるだろうというものです。

まあ主に高校までに学ぶ法則だと思うので、大学以降の数学をメインフィールドとしている人も法則を活用できるかというと疑問ではあるのですが、数学やってる奴という大きな括りにおいて法則を知っている傾向にあるということだと思います。


もうひとつは、大学以降の数学に通じる話で、数値計算も論理的な推論も頭の使い方が似ているから、論理的な推論に慣れている人間は数値計算も得意であるというものです。

経験的に思ったのですが、推論が得意な人って、わりと論理というものを単純計算の対象にしていると思います。

私にしてみたら論理というのは複雑なので難しいのですが、恐らく出来る人間にとっては推論も単純というか機械的にこなしているという、イメージであります。
まあ私も少しずつですが、そのようなスキルが身に付き始めているので、このまま一人前の数学徒に仲間入りできればなと思っているのですが…。

ようするに、数値計算も論理も同じ“計算”ですので、そういうのが得意な人間はどちらもパパパッとやってしまう、ということです。

あと、先ほどの数値の法則の話に関係しますが、推論が得意な人は勘が鋭いというのも私は経験的に感じていますので、「ここはこの法則で変形できるな」というのも瞬時に気づいてしまうのではないかと思います。


というわけで、以上の二つの事柄から、数学やってる奴は計算速いという説を示しました。
イメージですとか、こう思いますとか、感情論以外のなにものでもないですが…。

ただまあ、あくまでも仮説ですので、あとは証拠集めをして真偽を確かめるということになりますね。


いやはや、またもやクソ記事を生み出してしまうとは。

tag: 数学 考察 クソ記事 計算 法則 論理

勉強のモチベーションと限界と

最近は数学を何時間も通してする機会がいくらかありました。
特に先月は数学4部作として、4つも数学についての記事を書いたわけで、当然その裏では記事を書くために考察に時間を費やしていました。

昔と比べて、最近はだいぶ数学などの勉強をする頻度や時間が増えていますね~。

もちろん、勉強しなければという義務感があって、勉強を成し遂げたときの充実感はすごくあるのですが、疲労感が溜まっていって今月はどうも疲れてしまいましたね。

やはり限界というものがありますね…。


正直、もともと数学が好きでやっているというより、数学で分からないことがあって、分からないままにしておくのが気分が悪いので、分かる状態になりたいという思いから数学やってるんですよね。

まあ結果だけみると数学をやるモチベーションがあるということになるのだと思いますが。

でも、これって諸刃の剣といいますか、分からないということのストレスを裏で抱えて数学やってますので、それがまあ分かるようになったときの達成感でカバーされているのですが、ぜんぜん分からない場合にはストレスばかり溜まってしまいます。


というのはいいとして、なんにせよ最近は数学をやりすぎて疲れてしまいました。

最近は疲労でペースも落ちて、数学との関わりもYahoo!知恵袋でちょっと分からないところを聞く程度でしたね。
(姉妹ブログの記事「Yahoo!知恵袋で長丁場」を参照)


疲れた原因というのは、数時間、数学をやるというのをいくらか繰り返しただけなんですけどね~。
ヘタレだなと思います。

大学の数学教授になりたいと言っていますが、まずなれるかという問題もあることながら、なってしまった場合に、数学漬けの人生になりますからね。

このヘタレな自分がやっていけるのかというのは不安です。
というか、大学教授になる以前に、大学で数学科に入ってやっていけるのでしょうか。

続きを読む

tag: 数学 勉強 プログラミング 目標 職業 モチベーション 休暇 クソ記事

iPad mini購入の企画倒れ

おいAppleゴラァァァァァァァアアアアアア!!!!!!!!!

てめえこの(ピー)(ピー)(ピー)なくせに(ピー)して(ピー)になってんじゃねえぞ(ピー)野郎!!!!!!(放送禁止)


iPad mini、どうやら新作は作らずに段階的に廃止っぽいです。

記事「新タブレットPC購入を決意する」で書いたように新作のiPad miniを購入する予定だったので壮大な企画倒れになってしまいました。


姉妹ブログにもこないだ書きましたが、iPhoneが大型化しているので、iPad miniとの差があんまりなくなってきて、iPad miniの意味が薄れてきていたというのが要因みたいなんですよね。

ただ私はiPhone勢ではないので、iPad miniのサイズのiPadが欲しいんだろうが!!!!!
と思っている人はわりといると思うんですけどね~。

Nexus 7もそうなんですが、iPad miniのサイズだと片手でホールドできるので、そこが魅力なのです。


新作のiPadは、廉価版の9.7インチのいわゆる「無印iPad」というやつが出たようなので、これは廉価版で4万円くらいですからちょうど予算と合致していいんですけどね。

それか前作のiPad mini 4が4万円くらいになってるだろうから、それを買うか…。
もしくは、もう、ふっきれてAndroidタブレットにしてしまうかの三択です。


廉価版iPad、どうなんでしょうね~。
スペックは気にしてないのですが、9.7インチはちょっと…。

かと言って、iPad mini 4を買っちゃうとAppleってソフトウェア面ですぐ旧型のサポート切る印象がありますので、そこが気になるんですよね。

じゃあAndroidってなりますが、iOS使ってみたいし…。

ジレンマです。
あ、三択の場合はトリレンマっていうみたいです。


そろそろ、めちゃくちゃタブレットが欲しいので、早めに決めたいところですが、慎重に三択の中から選ぼうと思います。

だれかアドバイスください。
特に新型の無印iPadかiPad mini 4ならどっちが得策か気になります。


9.7インチ…扱いづらそう。
新型のiPad miniが実は発表されるのではないかと六月まで待ってみましたが、たぶんもうないでしょうね~。

今月はたぶん普通の記事はこのクソ記事一件のみとなってしまいますが、ネタが無いから許してちょんまげ!

tag: パソコン タブレット Apple iPad Nexus 購入 クソ記事

コンピュータは数学をできるか

あのアインシュタインは「本で調べればわかるものを暗記する必要はない」と言っていたそうです。

たしかに暗記というのは、まあ人間のすごいところで現在置かれている状況と記憶を照らし合わせて最適な知識を引き出す、みたいな人間の検索能力も合わせて考えれば価値のある行為だと思うんですが、

ただ覚えるだけという暗記自体の価値はあんまり…ないかなという印象を持ちますね。
それは、メモ帳などのツールを使えばいいじゃん、という話で済むからです。


一方で、物事を考えるという行為はなかなかツールで代替するということができませんでした。

たとえば私の好きな数学も論理的思考をするというのが基本ですので、これは機械にはこなせない仕事だということで数学者たちは誇りをもって数学をやっていたと思います。

まあ時にそれは、以前もブログに書いたかもしれませんが、記憶力、知識力メインでやってる学問に従事する人を見下すというか、
「覚えてないことは本とかネットで調べればいいじゃん。まあ数学は俺らにしかできないけどねー君たちは本やネットで代用できる能力身に付けて嬉しいの?」(私の若干の悪意によって誇張されてしまったセリフですが…)
と思ってる側面があるんですけどね。まあそれはいいとして。


しかしながら、この頃はコンピュータを使用してAI(人工知能)のプログラムを走らせることによって、コンピュータに物事を考えさせるということが可能になってきました。

たとえば将棋なんかもコンピュータがだいぶ強くなってきましたよね。

そして機械にはできない学問の代表格であった数学でさえも、まだ遠い未来の話ではあると思うんですが、思うにオワコン化が始まっているというか、コンピュータにその仕事を奪われる時代が到来するのではないかと感じました。

私はAIに詳しくないので、細かいことはよくわからないのですが、コンピュータに定理を証明させることが可能です。

たとえばCoqとかいうやつを使えば証明させられるんじゃないですかねぇ。
(意識低い系発言。Coqもやってみるべきだろうか…)

実は数理論理学によって論理の仕組みをかなり機械的に考察できるようになったことで、数学みたいな論理を軸にした学問はコンピュータによる代替の恰好の餌食になっている、と思います。


ただ、コンピュータに難しそうなのは数学の中で得られた知見を現実世界の何に応用できるか考えることや、逆にそもそも現実世界に応用することを目的にして数学の研究をすることですね。

現実世界も論理で割り切れないということは決して無いと思うんですが、なんにせよ複雑ですから、数学の中だけでゲームみたいにやるほうがよほど簡単だと思いますね。

あとプログラミングも、計算機科学の枠組みだけでやるならコンピュータにも簡単になる時代が来ると思うんですが、人間にわかりやすいシステムを作るとなると機械には理解できないことが多くて難しいのではないでしょうか。


やはり人間の気持ちを理解するというのはコンピュータには難しいでしょうね。
ですから、数学がコンピュータに仕事を奪われてもなお、カウンセラーみたいな職業は人間が担当することになると思います。

心理学も統計ゲーみたいなところがあるようですので、一部をコンピュータで代替するというのも不可能ではないと思いますけどね。

というわけで、まともな記事を書くにはあまりにも知識がなさすぎる状態でこんな記事を書いて、やっぱりまともな記事を書くことはできませんでした。


しかし、私のようにプログラミングだとか数学をやってる人も機械に仕事を奪われると思うと、安心できませんよね~。

まあ遠い未来だとは思うので、少なくとも我々が死ぬまでこういう職業が人間にしかこなせない高貴な職業であれば嬉しいんですけどね。

tag: コンピュータ 人工知能 論理学 プログラミング 数学 証明 暗記 クソ記事

数理論理学の些細な気づきごと

数理論理学の勉強はもう終わらせてやめましたが、最近ふと気づいてしまったメチャメチャどうでもいい発見があったので、たいしたことではないですから短くまとめます。

すごく小さな発見を、今回は2点ほど用意しております。

(追記ですが、ちっとも短く書けませんでした…)


まず1つ目ですが、xor演算についてです。
数学というより、プログラミングで論理演算をするときに知っとくとためになるかもしれませんね。

xorは、a xor bだったら、どういう意味かといえば、

aとbが両方ともfalseなら結果もfalse、aかbのどちらかだけがtrueなら結果はtrue、aとbが両方ともtrueなら結果はfalse、ですよね。


じゃあ、これがa xor b xor cと3つになったらどうなるでしょうか。
ちなみに左結合、つまり(a xor b) xor cです。

これは、感覚的には2項バージョンの拡張として、a,b,c全てがfalseなら結果はfalse、a,b,cのどれか1つだけがtrueなら結果はtrue、a,b,cのうち2つ以上がtrueなら結果はfalseになる演算だとみなしたいわけですが、そうはならないようなんですね。

反例としては、a,b,cが全てtrueだとしたら結果はfalseになってもらいたいわけですが、a xor bの時点で一回falseになってしまうので、そのfalseとcつまりtrueをxorして、結果はtrueになってしまうと。

ちなみに情報工学ではメジャーな話ですが、x xor trueをかけるとxの反転が得られますから、a xor b xor c xor dのa,b,c,dが全てtrueならa xor b xor c = trueの反転でfalseですね。

偶数個の項なら反例になりませんが奇数個のとき反例になることになります。


また、補足しておくと、ブール代数での話ですが、2項バージョンのときa,bの片方がtrueならtrueというのは、この“片方がtrue”というのが、
「1つだけtrueで残りはfalse」ということなのか、「1つ以上trueがあるが1つ以上falseがある(確実にすべてfalseではないが確実に1つはfalseがある)」ということなのか、という二つの捉え方があって、

これらは2項バージョンにおいては同値ですから違いが曖昧なのですが、3項以上になると違う命題になるので、後者のほうの捉え方も3項以上バージョンでは、また別個に考えられます。

つまり後者の捉え方で、a xor b xor cを、
a,b,c全てがfalseなら結果はfalse、a,b,cのうち1つ以上trueがあって1つ以上falseがあれば結果はtrue、a,b,c全てがtrueなら結果はfalseになる演算だとみなすこともできるわけですね。


さらに、trueでなくfalseの個数に着目した場合、つまりtrueとfalseが出てくる箇所をひっくり返した場合に後者では同値となりますが、前者では違う命題になるので、前者の捉え方のtrueとfalseをひっくり返した捉え方も論理的にはありますが、
まあa xor b xor cを感覚的に捉えるならばfalseの個数で考えるという発想はないと思いますので、この場合は無視しましょう。

だとすれば、上の話での後者の捉え方はどうなのかというのは考えなければなりませんが、このときも前者のときと同様にa,b,cが全てtrueという反例があって、感覚的なものとは違う真理値になります。


感覚的に捉えたものと同じ真理値にしたい場合はどういう論理式を書けばいいのかというと、後者の捉え方の場合は単純に、
(a or b or c) and not (a and b and c)みたいに全ての項をorでつなげたものと、andでつなげたものの否定の論理積をとるだけです。

むしろ、2項の場合はa xor bは(a or b) and not (a and b)と同値なのに、3項以上の場合は同値でなかったことに驚きますね。


前者の捉え方では、2つ以上の項がtrueにならないことを表現するために、あらゆる2つの項の組み合わせについて論理積がtrueにならないことを言わなければならないわけで、

a,b,cなら(a or b or c) and not (a and b) and not (a and c) and not (b and c)みたいに、長いですね。

全ての項をorでつなげたもののあとに、n項ならばnC2個の2つの項の組み合わせの論理積の否定を付けて、論理積でつなげなければなりません。
nandを使えば(a or b or c) and (a nand b) and (a nand c) and (b nand c)みたいに若干、短くなるか…。


というわけで、イメージ通りにやりたい場合はxorでつなげるのでは駄目で、地味に大変な論理式を書かなければならない、という話でした。

そうそう、上記の論理式を書く以外にも、真理値表をもとに論理式の標準形を書くという手段も、一応ありますね。

続きを読む

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# リスト ソート 数学 順序 関係 クソ記事 クイックソート

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