時々唸るファンの音

色々と勉強してみたいと思ってる人の備忘録。

フィボナッチ数列とメモ化についての備忘録

久しぶりに技術っぽいブログを書く

おひさしぶりです。

ちょっとずついろんなことを学んでいる今日この頃です。

(たまにどうぶつの森してるけど…


 

今日は勉強していて初耳だったメモ化についての備忘録です。

私のために書くので分かりづらいとは思いますが…

知らなかった人は「へ~!」

知ってた人は「そうそう」って思ってくれれば幸いです。

(そもそもの解釈が間違ってたらさーせん!)
 

フィボナッチ数列について

これは有名な数列だから、ご存じの方も多いと思います。

n番目のフィボナッチ数をFnであらわすと、Fnは再帰的に…

F0 = 0,
F1 = 1,

Fn+2 = Fn +F(n+1) (n≧0) で定義される…

フィボナッチ数 - Wikipediaより

ってやつ。

実際の数字で言うと
0,1,1,2,3,5,8,13,21,34,55,89,144,233....って感じにふえてくやつだね。

0 と 1 があって
0 + 1 = 1
1 + 1 = 2
2 + 1 = 3
3 + 2 = 5
5 + 3 = 8
8 + 5 = 13
(以下略)
これを式にすると上記のものになるって感じだ。

それをプログラミングするとどうなる…?

私の安直な頭で最初に思い浮かんだのがコレ

JavaScript>

function fibonacci(n) {
  if (n === 0) {
    return 0;
  } else if (n === 1) {
    return 1;
  }
  return fibonacci(n - 1) + fibonacci(n - 2);
}
const length = 40;
for (let i = 0; i <= length; i++) {
  console.log(fibonacci(i));
}

一応出力はできるけど、const lengthを増やした時になんだか早くない。
なんでだ~?って思ったら
const lengthを増やすと爆発的に足し算する回数が増えてしまうみたいなんだって。
(こういう処理の増え方を指数オーダーと言うらしい…しらなかった…)

そこでアルゴリズムを使ってみるといい。

1度使った計算を保存し、後からをそれを読み取れればもしかして…
大幅に計算量が減るのでは……

そういう小技を「メモ化」というらしい。

なるほどなるほど。

それを実際のソースコードにするとこうなる。

JavaScript>

const memo = new Map();

memo.set(0, 0);
memo.set(1, 1);

function fib(n) {
  if(memo.has(n)) {
    return memo.get(n);
  }
  const value = fib(n - 1) + fib(n - 2);
  memo.set(n, value);
  return value;
}

const length = 40;
for (let i = 0; i <= length; i++) {
  console.log(fib(i));

なるほどなるほど、

memoの1番目には0、memoの2番目には1が入っていて
もし、nにすでにnが含まれていたらnを返し、
入ってなかったら計算済みのフィボナッチ数をmemoの中にぶち込むのか…?
(という雑な認識)

そして最後にvalueを返して出力…
なるほど…

たしかに足し算の回数が圧倒的に少ないように思える。
っていうか少ないじゃん。

これ考えた人すごく賢い、賢い…すごい…

ということでいろいろ勉強した1日でした。まる。

2020-3-19 ほんの少しの休息と

お休みをもらっていました

どうもみなさま、お久しぶりです。

かっ飛ばしすぎたのがよくなかったのかどうかはわからないのですが、少しエネルギー切れを起こしてお休みをしていました。

特別何も言わずに休んでしまい、一部の方に心配をおかけしました。

ごめんよ~!

 

今回の体調不良について

完全に予想はしていました…。

予測可能回避不可能的な感じでした…。

予測していてもどうにもならないこともあるんだなぁと再確認しました。

 

(良い子のみんなは、気付いたときにしっかり休むのだよ!)

 

ゆっくり過ごして今はちょっと元気になってきました。

今度はゆるゆる勉強していきたいと思ってます。

 

最近の過ごし方。

家でのんびりしてることが多いのですが、一日のうち少しでも散歩へ出るようにしています。

太陽光!大事!とっても!

 

あとは前々から少しずつ頑張ってた、N予備校のwebのアレも少しずつ進めて鬼門の2章もなんとか終わりそうです。うむうむ。

 

Podcastについて

ちょっとエネルギー使うことなので、

不定期更新になるかもしれないのですがまたやっていきたいなーと思ってます。

更新したときは聞いてくれると嬉しいです♪

 

よろしくおねがいします。

 

また、ゆるゆるTwitterとかで絡んでくれると嬉しいです。

よろしくお願いします。

 

 

2020-02-03 「嫌いにならないこと」を続ける重要性

「嫌いにならないこと」を続ける重要性

本日の日記の本編です。

最近、どこかでジュニアエンジニアになるのに500~1000時間くらい時間があればよいとかいう内容のものを見かけた気がしました。

 

ふぁん「なるほど…?新生~漆黒まで走る時間でいいのね!意外といけるかも。」(FF14脳)

 

という半分冗談みたいなお話は置いておいて、

 

そのジュニアエンジニアになるための時間の話を某所でしたところ、

「人が何かをきちんと習得するのに1万時間かかるという話を聞いたことがあります。なので、500~1000時間というのはある意味納得の時間数ですね。」とお返事をもらいました。

 

1万時間。たしかに。

実は、1万時間という時間数に心当たりがあります。

私が0歳~20歳(大学入学)までにかけた音楽の時間数はトータルで最低1万2000時間になります。

(授業以外の自主練(中高):2時間*6年、部活+外部合唱団練習(高校)3時間*3年、浪人時代12時間*1年=だいたい12000時間)

 

それを考えると「何かを修得するのに10000時間」というのは割と納得いく時間数ではあります。

 

好き*時間数 is 最強!だけど…

「好き」で時間数かけてる人は無茶苦茶強いです。

本当に強いです。

マジで強いです。

 

私も最初は好きで時間をかけていましたが、

大学に入って「好き」な音楽に自分を否定されてる感覚をしょっちゅう味わうようになり、苦しくなってしまいました。

結局、それが私が大学に通い続けられなくなる一つの要因になってしまいました。

 

その結果何が待っていたかというと、

「音楽がやれない」というところまで行きつきます。

1~2年ろくにやれなかったのを今でも覚えています。

 

好きって、案外怖いのかもしれない。

とぼんやりおもったりしました。

 

実は嫌いにならないことが一番重要なのではないか

何かすること、それ自体は特別好きなことじゃなくてもいいと思ってます。

1番好きじゃなくても全然いい。

でも「嫌いにならないこと」をやった方が、最終的にかけられる時間数が多くなる。

つまり、その分だけ強くなれる可能性がある。

 

好きな人ほど伸び率はよくないとは思うよ。

でも、普通くらいにやりたいことで「嫌にならない」ことをやるってのは、すごく強くなるんじゃないかと思いました。

今の私

正直、今の段階だとプログラミングが「嫌いにならないこと」かわかりません。

 

悔しいと思うことはあるけど、

それが嫌につながってないから、現段階では悪くない感じなのかなーと思ってます。

 

とにかく、毎日コツコツ頑張るしかないですね。

 

無理なく、でもしっかり頑張っていきたいな。

 

 

2020-02-03:FF14の友人と会って泣きそうになった話など。

※今日は特に技術と関係ない話です。

 

フレと会って泣きそうになった。

私は某FF14という名前のゲームをやっていました。

実は言うと昨年の12月に「群発頭痛」という割とえっぐい頭痛に悩まされはじめて、あまりログインできなくなりました。(群発頭痛についてはまた今度触れようとおもいます。)

 

どうしてもMMOだとほかの人と遊ぶ時間が多く、

いつ発作の頭痛が来るかわからないそんな状態だと周りに迷惑をかけかねないと思ったのがログインを減らした主な理由です。

 

丁度、その時期にプログラミングにも興味を持っていて

発作のない時間、弱い発作の時にやりたいだけできるというのが、今の私のライフタイルにあっていて、少し時間の使い方を変えることに。

 

それからはこっちのプログラミングのお話が色々うまく回りだし、

本当にログインするきっかけをなくしかけていました。

 

FF14には自宅を作れるんですけど、危うく自宅が無くなるかもしれないってレベルでログインできなくなってました。(たしか、45日くらい全く家に入らないと撤去対象になってしまうのです…)たくさん考えて、家の維持をするために1度ログイン。でも5分ほどでログアウトしました。

 

そのあと旧友から「大丈夫か?」とか何件か連絡がきて

1日だけログインをすることを決意。

 

久しぶりに友達に会ってきました。

 

わざわざtell(直接声をかけられるチャット)で声をかけてくれたり…

LS(グループチャット)で「ふぁんさんだ~~~~」と声をかけてもらったり…

久しぶりだからお話したいって言ってもらえたり…

SS撮ろう!って言ってもらえたり…

 

ぶっちゃけ画面の前で涙が止まりませんでした。

 

私が約2年

プレイ時間で言うと約5500時間

「生活」していたといっても過言じゃないFF14

 

たまには顔出さないと心配かけちゃうな。と反省しつつ

でも、今やるべきこともある程度明確になったので、そちらもしっかり見据えつつ、

うまくバランスをとっていきたいなーと思いました…

 

みんな大好きです……本当に……

 

最後に。

うちの子かわいいので見てください。

 

f:id:noisy_f:20200203053457p:plain

 

 

 

 

2020-01-30:巷でよく聞く話について考えてみた。

ちょっと問題ある話かもしれないけど、

自分の中で納得いった話だったので少しまとめおこうと思う。

よく聞くCS学部卒以上の強さについて考えてみた

私がプログラミングの勉強をはじめてから、ちらちら聞くCS学部卒は強いとかどったらこったらのお話。確かに強いんだろうけど、どう強いんだろうなーと考えてみました。私の場合、音楽大学に入ってたことが割と理解の糸口につながりました。

CSも音楽も基礎教養から幅広くやる(と思われる)

音楽大学は少し特殊なので簡単にご説明します)

音楽大学の場合は、技術もろもろの入試があります。

入試の段階で、入るのに値しない実力の人は入れません。

メイン科目(歌)、サブ科目(ピアノ)、聴音、視唱、コールユーブンゲン、楽典(音楽理論)、国語、英語。

このすべてが大学の基準を満たしていないと入学すらできません。

 

CSは一般的にはおそらく理系科目に適性のある人が入るのだと思います。

 

入学後、1~2年の間は教養科目を選択する必要があり

そこで本当にいろいろな専門性に必要な音楽の基礎教養を学びます。

例えば西洋音楽史、例えば音楽概論、例えばイタリア語だったり、場合によってはキリスト教史などの選択も入ってきます。もちろん、メイン科目の歌は1年生からゼミ所属のような状態で個人レッスンを受けたり、サブ科目も1年生からある程度の学年まで取る必要があります。必要とあれば和楽器もやります。もちろん、合唱だって授業にあります。音楽理論も入試以上のことをし、音楽の基礎力を高めていきます。

 

…というのをCS学部でもやるのだろうな…と考えたら

たしかに「基礎」の部分の厚さが、大学へ行ってる人と行ってない人で圧倒的な差になるんだろうなと考えられました。

そこに積みあがるもの

「基礎」の大事は音楽の時に死ぬほど痛感させられてます。

私は音楽大学受験は高校3年生の夏から開始し、超ド短期で仕上げたひとです。

ほぼ、すべての科目において基礎がなかったので、どのレッスンに行っても「とにかく基礎をやっていきましょう」という話になりました。

ピアノでいうと「ハノン」が一番有名な本だと思います。

習っていた方は、聞いたことあると思います。

私に課せられたのは、ハノンをひたすら2時間弾き続け、とにかく基本的な指の動きを修得してくださいとのことでした。

歌で言うと「コールユーブンゲン」という本があり、

当時ほぼ楽譜の読めなかったわたしは1冊壊れるまで譜読みをし、歌い続け、

本番前に綺麗な本で本番対策をした程度にはやりこみました。

おそらく、そのおかげでごくごく普通に音楽する分にはあまり困らない基礎力を得ています。

 

CS学部の場合、ここまでピンポイントでの適正試験はないとは思われるのですが、

入ってから卒業するまでの期間で、「基礎」を修得される方がおおいのではないのかなと思ったのです。

具体的にどんな学部があるのかは、私はCS学部じゃないからあんまりよくわかんないけど、きっと似たようなメイン科目以外の幅広い知識を得ていくのはあまり変わりがないんだろうなと思ったのです。

別に大学に出てなきゃやれないわけじゃない

私がいいたいのはここからのことなのですが、

「大学」を出ないと音楽やれないという決まりはないです。

プログラミングも同様で「大学」を出ないとプログラミングはやれないということはないはずだと思ってます。

私は考える

音楽の専門の大学に在籍してた経験と現在プログラミングを学習していて強く感じるのが、同じ「技術」を磨くという点を見ると、かなり似ている部分も多いということです。

 

そして、音楽のことをやっていたからこそ思うのです。

 

派手なことではないかもしれないけれども、

コツコツと基礎練習をし続けるのは非常に重要なことなのではないかと。

基礎固めがしっかりしてれば、言語が多少変わっても修得スピードがある程度の速さを維持できる。

基礎固めが出来れてれば、思いもよらない基礎知識に助けられることもある。

 

幸い、私は勉強にもう少し時間を使うことができるので

そういうことを留意しつつ、

可能な限り基礎的な反復練習を行いつつ、これからの技術習得をしていきたいなーと思いました。。。

余談

私が大学1年生のころに聞いた、

博士課程の方の歌は衝撃でした。

「声」もいいんだけど、技術+理論で圧倒されたのがいまだに記憶に残ってます…。

博士課程の人すごい…。

2020-01-25:ゲストをおもてなしする など

 ついにふぁんfmにゲストがいらしてくれました◎

おもてなし下手の私がついにゲストを呼んでお話することになりました。

すでにリリース済みです。

まずはこれをどうぞ。

anchor.fm

 

(じつはこの前に1回友人に頼んでテスト収録をしているのですが、それはまた今度リリースしようと思ってます。お蔵入りにするにもったいない感じなのでリリースはします。ちょいとおまちを~~~!)

 

成し遂げたいamさんに出た経験が活きた。

共有できる台本のようなものを用意しておくとよいと学べたので

ちゃんとざっくりした進行表を用意しました。

 

さらに私が個人的に工夫した点は

最大25分程度で1度ブレイクを置きたい私がいたので、

ゲストの方には「私のほうでストップウォッチ使って15分~25分程度で一度収録休憩取りますねー」と伝えておきました。

 

20分で1度水分補給などをちゃんとできてると喉にもやさしいのを知ってるので、そういう形式で収録させてもらいました。

 

休憩をとるメリットとしては…

話の展開をその場である程度打ち合わせができた点はよかったですね。

話してて「次の20分は、この方向性で行きましょうかー」みたいなことを言えたのが個人的にはよかったです。(ゲストはどう考えてるかしらん!)

 

編集が圧倒的に楽になるので(ただの私の横着ともいう)

個人的にはそういう工夫をしてよかったなぁと思いました。

 

技術のお話

わたしが今まで「音楽」をある程度やってきたんですけど、

音楽も「技術」のお話なんですね。

 

ザックリした音楽の練習の話をするんですけど、(※私の場合)

地道な「ドレドレド」みたいな発声練習から、

少し技術的な曲を練習をして

言語の学習をして

それを実際の曲にして完成にもっていくんです。

 

それって、結構今勉強る「技術」の話も近い感じなのかなーってぼんやり思ってます。

 

基礎的な動きを一つ一つ勉強したり

小さなものを作っていって

言語そのものの言語について学んだりしたり

それを最終的に大きなシステムを作っていくのかな…?

と思ったんですよ。

 

技術習得における順番って

基礎練習→基礎練習から少し応用練習→もう少しインプット→実際に一つ作るみたいな感じ…?

 

上手に言えないんですけど、そんな感じの印象を受けました。

 

なので、

ジャンルは全く違うなのですが、今までのノウハウを活かして少しお勉強している感じです。

 

これ、SさんゲストのPodcastでもちょっとお話したんですけど

「今までやってきたことに無駄はないですねー」みたいなお話したんですよ。

 

どんなことがどんなふうに活きるかわからないので、

色々やってみるのも大事だし、それで成果が出なくても

それが思わぬ形で活きてくることもすごく多くてね

 

人生無駄なことはあんまりないんだろうなって感じてます。

 

自分は自分の道を進む。

むずかしいです。

でも、他人とできるだけ比べないで

のびのびとやってみることの重要性を感じています。

 

私の周りの人は本当にすごい人が多くて

「わたしなんか・・・」って思ってたけど

何が正解かなんてわからないし、

一生懸命にやっていくしかないんだろうなっておもったんですよね。

 

それに気づかせてくれたのがSさんとのお話だったので

真面目なお話をね、たまにはちゃんとするのも大事だなーと思いました。

 

ということでちょっと長くなりましたがこんな感じです◎

 

それではまた!

2020-01-20 0からポートフォリオサイトを作った など

事の始まり

ふぁん「HTMLとCSSとJSを使って何か一つ作ってみるか……」

 

というのも、ちゃんと自分で0から100まできちんとサイト作ったことなかったよなぁ…って思い、自分のポートフォリオなら何ができても怒られない(はず)だと考え作ることに。

 

まずは出来上がってしまったものを紹介します……

 

www17.plala.or.jp

 

あああああ………

すごくかっこよくない、すごく…(白目)

せっかくだから

デザイン能力皆無だけど、

いろんな人の気持ちを知りたいから、デザインからやってみよう…

自分でコーディングするので、

自分のレベルに合ったものを作らないと全くできなくなってしまうので

そこも考慮しながらデザインをしました。

 

そこで使ったのはAdobe XD先生!

まだ使い慣れないけど、だいぶ使い方が分かってきた気がします。

難しいけどねー!

 

せっかくだからTOPのところだけ乗っけておこう…。

 

f:id:noisy_f:20200120221804p:plain

これがXDでつくったTOPイメージ

こんな感じになったらいいな~ということがだいたい固まりました!

 

さっそくコーディング!

下手なりに何回もやってるので、HTML/CSSの部分は割となんとか形にできました。

途中で突っかかったのは、

私のプロフィールをレールに見立てた2本の線の上に表示する部分の実装には苦労しました…。

 

ここで一つ学びを得ました…

強引に合わせようとしてぐしゃぐしゃにしないこと!

そうです。

強引にしようとするとあとで何がなんだかわからなくなるので、

気合で何とかしない!

理論をちゃんと考えてやってください!わたし!!!!

 

CSSの部分の調整もなんとかなんとか。

 

さすがにこのままだと寂しい…

ここまで簡略化したのは、デザイン能力が皆無なのもあるんですけど

JSでの制御を入れたくて、その部分を実装しやすくするために今回シンプルなデザインにしたんです。

 

ということで、少し動きを付けてあげることに。

 

ぬるぬる動くアレとか

メニューのところとか

プロフィールの線路に見立てた線に略歴が重なったりとか…

(プロフのところはイマイチ制御が上手にできなくてぐぬぬ…)

(次回への課題ですね…ぐぬぬ

 

これで少し寂しくないぞ!(たぶん)

 

そして、出来上がったものを

主人にアップロードしてもらいました◎(というのか?)

 

デザインは本当に苦手で避けられれば避けたかったんですけど

今できる範囲でいいから「やってみる」のが大事なのかなって思って、

思い切ってチャレンジしてみました。

 

いずれ、これを超かっこよくしてみたものです。

 

いろんな人の気持ちを知るにはまずやってみる!

とりあえずやってみる精神でがんばりました…。

 

とりあえず形になってくれてよかった◎

 

周りの人がPodcastをはじめている

私のとりあえずやってみる精神ではじめた「ふぁんFM」

そのあとに続々と新しい番組ができてる!!!!!!

 

すごい!!!!!!!!!

 

みんなとりあえずやってみててすごいな!

私もほどほどにがんばりたいと思います!

 

なお、ふぁんFMでは

ふぁんとお話したい~って人を募集しています。

現在、少し待っていただくことになりますが、

それでもよければぜひこえかけてくださーい!

 

雑談しましょ!◎

 

連絡は私のTwitterまでどうぞ!

 

それでは今日はこの辺でーっ。