searchカテゴリー選択
chevron_left

カテゴリーを選択しなおす

カテゴリーのご意見・ご要望はこちら
cancel
プロフィール
PROFILE

わくば@構えは斜めさんのプロフィール

住所
未設定
出身
未設定

自由文未設定

ブログタイトル
わくば[医学とプログラミング]
ブログURL
https://pyecracker99.hatenablog.com/
ブログ紹介文
医学部5年。IT技術をもって僻地医療に貢献せんとする。 平凡な医大生がエンジニアとしてのスキルを身に着け僻地を帰るまでを追った奮闘記
更新頻度(1年)

35回 / 365日(平均0.7回/週)

ブログ村参加:2020/06/27

本日のランキング(IN)
フォロー

ブログリーダー」を活用して、わくば@構えは斜めさんをフォローしませんか?

ハンドル名
わくば@構えは斜めさん
ブログタイトル
わくば[医学とプログラミング]
更新頻度
35回 / 365日(平均0.7回/週)
フォロー
わくば[医学とプログラミング]

わくば@構えは斜めさんの新着記事

1件〜30件

  • 今日のアルゴリズム(JS実装)〜Boyer Moore Algorithm〜

    // どうも、わくばです! 最近は周りも国試を意識し始めて、少し焦りを感じてきました(笑) Webサービスの開発もありますし、新入生も入ってきたし、なんか気持ち的にもかなり追い込まれてました(笑) うまく両立していけるようにしないとです。 近況報告はこの辺にして、今回はBoyer Moore法を記事にしてみます。 まず言葉の整理をしておくと、テキストというのは検索対象の文字列、パターンは検索したい文字列を指します。例えばABCDEFGの中からDEFの文字列を検索する場合、ABCDEFGをテキスト、DEFをパターンと呼ぶことにします。 このアルゴリズムを理解する上でポイントとなるのは、ずらしテー…

  • E資格合格!〜計120時間で合格した方法〜

    どうも、わくばです。 E資格合格できました! その結果と感想、僕がとった勉強方法をお話できればと思います 結果 勉強方法と期間 お金、、、 感想 結果 得点は7割でした。笑 ギリギリ、、、 普通に難しかったです。僕の勉強が実装はほぼせず、JDLA認定講座とE資格黒本を一周した程度だったので、深いところに踏み込まれるとかなりしんどかったですね、、、 得点はかなり低いんですが、この間に6年生への進級試験なども並行していたりしていて、勉強時間などを加味するとかなり必要最低限でコスパ高く合格できたのではないかと思います。その点で参考にはなるかなと。 勉強方法と期間 勉強時間は合計120時間で、1日2時…

  • 【ご報告】エンジニアとしてプロジェクトに参加させていただくことになりました。

    どうも、わくばです! ずいぶん間があいてしまったんですが、実はタイトルにもある通り、フロントエンドエンジニアとしてプロジェクトに参加させていただける事になりまして、そちらのタスクで全然ブログが書けていませんでした。 就職とかインターンではなく、お金をもらえるものではありません。したがって仕事と呼べるものではないので「エンジニアとして」という表現が適切かはわかりませんが、やることは結構ガッツリエンジニアリングです。 大学をまたいで医学生のみで構成されているコミュニティがありまして、そこで医学生向けのWebサービスを立ち上げようということになり、そこにjoinさせてもらえたって感じです。 なのでま…

  • 今日のアルゴリズム(JS実装)〜Rabin-Karp Algorithm〜

    // どうも、わくばです! 今回はRabin-Karp algorithmです。どんどん重たくなってきたので、日をまたがないとできなくなってきました(汗)。まだまだですね。。。 Rabin-Karp algorithmはハッシュ関数を用いたマッチングアルゴリズムです。ハッシュ関数というのは暗号化というか何らかの値を返す たとえば探している文字列をaaabとし、検索対象の文字列をabaaaaabaaababaabなどとした場合、まずは探したいaaabという文字列をハッシュ関数に掛け数値化(出力Xが得られたとする)します。そして 検索対象のアルゴリズムから、最初の4文字をとってきてハッシュ関数にか…

  • 今日のアルゴリズム(JS実装)〜Knuth Morris Pratt Algorithm〜

    // どうも、わくばです! 今回はKMP algorithmです。これは意味がわかるまでかなり時間かかってしまいました。なんとなく言いたいことはわかるんですけど、それをアルゴリズムに起こすときにハテナが大量に(笑) KMPの探索部分はすぐしっくりきたんですが、Longest Proper Prefix which is Suffix (LPS) arrayをつくる部分が何をやってるのか全然わからなくて、、、(笑)。日本語の解説だとテーブルって呼んでるのも見かけますが、LPSと同じものです。 アルゴリズムそのものの解説はこの記事が非常にわかりやすいのでぜひ。 一週間で身につくアルゴリズムとデータ…

  • 今日のアルゴリズム(JS実装)〜Naive String Pattern Matching〜

    // どうも、わくばです! 今日からPattern Searchingに入りたいと思います。KMP AlgorithmやBoyer Moore Algorithmなどちょっと耳にしたことのある仰々しい名前のアルゴリズムが待っているジャンルなのでちょっと怖いです(小並感)。 まずはNaive String Pattern Matchingです。Naiveと付くときは「モジュールやライブラリなどのサブルーチンを使うと簡単に実装できるけど、あえてそれを用いないで実装する」場合を指すことが多いです。今回は、多分正規表現使えば簡単にできるけど、それをNaiveに実装するという意味なのだと思います。シンプ…

  • 今日のアルゴリズム(JS実装)〜Exponential Search〜

    // どうも、わくばです! 今日はExponential Searchです。Exponentialといのは指数関数的という意味です。理系学生は\(e^x\)や\(exp(x)\)でおなじみですよね。 このアルゴリズムは名前の通りで、指数関数的なインターバルを用いて飛び飛びに探索していくアルゴリズムです。Jump Searchと発想は近いと思いますが、Exponential Searchdでは最終的にBinary Searchを用いるので速いです。 以前記事にしたBinary Searchを添付しておきますので参考にしてみてください。 pyecracker99.hatenablog.com 以下…

  •  今日のアルゴリズム(JS実装) 〜Interpolation Search〜

    // どうも、わくばです! 今日はInterpolation Searchです。このアルゴリズムはBinary Searchの改造版で基本的な考え方は同じです。したがってソート済みの配列に適用する点は同じです。では何が違うのかというと、Binaryでは真ん中で半分にしていましたが、Interpolationでは分割点をもっと正確に計算しているという点です。確かに、何も考えずに真ん中で分けるのはあまりスマートではないですよね。せっかくソート済みなんだからもう少し絞れるだろ、というわけです。「あいさつ」という言葉を国語辞典で調べる場合、真ん中を開くことはしませんよね。あ行のように明らかに近いところ…

  • 今日のアルゴリズム(JS実装)〜Jump Search〜

    // どうも、わくばです! 今日は Jump Searchです。こちらもソート済みの配列を検索するアルゴリズムです。単純に言うとLinear Searchを端折った感じです。まず決まったintervalで飛び飛びに進んで探索をします。どのintervalにあるかわかったらその中でLinear Searchをして終わりです。 コードは以下のようになりました。 const jumpSearch = (array, value) => { let { length } = array let interval = Math.floor(Math.sqrt(length)); //これらは区画の両端。…

  • 今日のアルゴリズム(JS実装)〜Binary Sort〜

    どうも、わくばです! 今日はBinary Sortです。ソートが前提の処理ですが、前回のLinear searchより速いと思います。 仕組みはこんな感じ 基準値を決める 基準値と探している値を比べる 基準値より大きければその基準値より上に的を絞る 基準値より小さければその基準値より下に的を絞る 一個になったらそれが答え 半分ちょを繰り返して探していくってことですね。 const binarySearch = (array, value) => { //まずソート。以前の記事を参照 const sortedArray = quickSort(array); //上限と下限を定義する //ここか…

  • 今日のアルゴリズム(JS実装)〜Linear Search〜

    // どうも、わくばです! Sortに関してはある程度有名なものをやり終えたので、Searchに入ろうと思います。 今日はLinear Searchです。一番簡単なサーチだと思います。 コードはこんな感じです。 function linearSearch(array, value){ let results = [] for(let i = 0; i < array.length; i++){ if(arr[i] === value){ results.push(i) } } return results ? results : -1 } console.log(linearSearch([1…

  • 今日のアルゴリズム(JS実装)〜Radix Sort〜

    // どうも、わくばです! 今日はRadix Sortです。Bucket Sortに似てますね。Radixというのは基数とか根とか底とかいくつか訳がありますが、この例ではn進法のnのことです。 Radix Sortを簡単に説明すると、例えば10進法で考えるなら 0−9の計10個のバケットを準備する 配列を全部スキャンし、各要素の1桁目の値について0−9に分類してバケットに入れる(345という要素ならバケット5に入れる) 2を桁を上げて繰り返す。 といった感じです。比較ベースではないタイプのソートです。 コードはこんな感じになりました。 radixBaseはn進法のnのことです const ra…

  • 今日のアルゴリズム(JS実装)〜Bucket Sort〜

    どうも、わくばです! 今日はBucket Sortを勉強しました。バケツを用いた分割統治アルゴリズムで、Counting Sort の一般化と考えられます。実際、バケツサイズを1とすると同じ値のものだけが同じバケツに集約されていくので、Couting Sortと同様の処理になります。 バケツに分割して、それぞれのバケツでソートを実行し、統合するという典型的な仕組みです。 コードはこんな感じです。 //bucketSize : バケット一個あたりの要素数 const bucketSort = (array, bucketSize = 5) => { if (array.length < 2) {…

  • 今日のアルゴリズム(JS実装)〜Counting Sort〜

    // どうも、わくばです! 先日。E資格に申し込んだと言ったのですが、試験会場が都心しか空いていないことと、その他大学の実習の都合などいろいろ加味した結果、キャンセルして見送ることにしました。 JDLA認定は二年間有効なので、また機を見て受験しようと思います。 一応報告でした。 さて今日勉強したのは、Counting Sortです。まず出現回数をカウントし、その情報を回数と値がペアになるように別の配列に保持しておきます。今回は出現回数をvalue、何の値かをindexとして配列を作成しています。値をindexとすることで自然にソートされます。 以下がコードです。 const countingS…

  • 今日のアルゴリズム(JS実装)〜Shell Sort〜

    // どうも、わくばです! 今日はShell Sortを学びました。これはInsertion Sort の応用なのでコードを見てイマイチピントこなかった方は以前書いたInsertion Sortをぜひ参考にしてみてください*1 Shell Sortは飛び飛びでグループを形成し、グループごとにInsertion Sortを繰り返していくソートです。由来に関しては諸説あり、飛び飛びの間隔が徐々に狭まっていく様子が、貝殻のすぼまっていく形状を想起させるという説と、シンプルに「ドナルド=シェル」という方が考案したからという説がありました。 コードはこんな感じです。 const shellSort = …

  • Big O notation の計算原理についてちゃんと調べてみた

    // どうも、わくばです! アルゴリズムをいくつか勉強しているうちにBig O notationに関してだいぶ適当だったと感じてのでちゃんと調べてみました。が、結局わりと適当でオッケーみたいですね笑 MITのサイトや各種プログラミング学習サイトから引用しながら地味&&ラフに説明させていただきます。 まず気になっていたのが、\(\Theta()\)とか\(\Omega()\)とかの記号です。\(O()\)しか見聞きしたことなかったので一旦調べてみました。 freeCodeCampの記事では以下のようにありました。 Big O: “f(n) is O(g(n))” iff for some con…

  • 今日のアルゴリズム(JS実装)〜Quick Sort〜

    // どうも、わくばです! E資格の申し込みを完了しました。2万は高いなあww もともとなんでE資格を受けようと思ったかというと、プログラミングの勉強を始めたとき医学と親和性高いものってことで人工知能やデータサイエンスの領域に的を絞っていて、背水の陣を敷くために8万のJDLA認定講座に登録したのが事の発端なんです。 なんて消極的な受験動機なんだ(笑) 勉強過程でアプリ開発の方に興味がそれまして、いまやE資格は「早く終わらせたいタスク」みたいな位置づけになってしまいました。10万近く使ったので、貧乏大学生としてはなんとしても意味あるものとして終えたいわけです(笑) 無駄話はさておき今日のアルゴリ…

  • 今日のアルゴリズム(JS実装)〜Merge Sort〜

    // どうも、わくばです! 今日はJDLA認定講座の最後の試験でした。無事合格しましたので、これでやっとE資格試験を受験できます。 なんでこんなにめんどくさいのだ(笑) 機械学習は統計的な処理もしっかり含まれていて、医学でも役立つので何れにせよ頑張りきろうと思います。 さて今日のアルゴリズムですが、Merge Sortです。いくつかアルゴリズムをコードに起こしてきましたが、アルゴリズムのぱっと見の印象では意外と複雑さの検討がつきにくいですね。 ソート系は難易度低い印象ですがBubble Sortや今回のMerge Sortなど、所見でコードを書こうとするとなかなかしんどいです(笑) Merge…

  • 今日のアルゴリズム(JS実装)〜Insertion Sort〜

    // どうも、わくばです! 今日はInsertion Sortです。自分より前の要素を比較していって、自分より小さいものが現れたらその後ろに挿入するというアルゴリズムです。 コードは以下のような感じです。 const insertionSort = array => { for (let i = 1; i < array.length; i++) { //jの位置から比較しながら前に戻っていく let j = i; let temp = array[i]; //tempより小さいものがでてくるまでループ while (j > 0 && array[j - 1]> temp) { //自分より大…

  • 今日のアルゴリズム(JS実装)〜Selection Sort〜

    // どうも、わくばです! 今日はSelection Sort を学びました。今回はシンプルです。 このサイトが非常にわかりやすいのでぜひ:Selection Sort - InterviewBit コードはこんな感じになりました。 function selectionSort(array, size){ const { length } = array; for (let i=0; i< length; i++){ let minIdx = i; for(let j =i+1; j < length; j++){ if(array[i]>array[j]){ minIdx = j; } } …

  • 今日のアルゴリズム〜Binary Heap〜

    どうも、わくばです! 昨日はJDLA認定講座の数学試験があったので、お休みしました(笑) 今日はBinary Heapです。正直コードに落とすのがかなり複雑で時間がかかっていしまいました。ヒープがどんなデータ構造なのかについてはページの最後に参考を用意しておいたのでそちらを御覧ください。*1 結局は優先キューなので、「自由に追加できる」「先頭から最小のものを取り出せる」が実現できれば良く、重要なのは挿入や抽出をした後の配置換えの部分になるかなと思います。以下では一つのクラスとしてまとめて実装しています。 Minimum HeapとMax Heapどちらでも大した違いはありませんが、今回はMin…

  • 今日のアルゴリズム〜Bubble Sort〜

    // どうも!わくばです! 今日から1日1アルゴリズムずつ記事にしていこうかなと思います。今までなんとなく避けてきたんですがそろそろそうも行かなくなってきたので、、、 普段codewarsというサイトでコーディングの勉強をしているんですが、上級になると結構難しくなるんですよね。codewarsではレベルのことをkyuといって、そのkyuが上がってくるとどうにも素人の発想では回答できない問題も増えてきます。kyuが上がるのに比例して1問にかかる時間が長くなってきまして、そろそろ真面目にアルゴリズムを勉強しておかないと、この先いくら時間があってもてりないのでは、、、というわけです(笑) 勉強の手順…

  • Vimerになりたい!

    どうも!わくばです! 前回はアドベントカレンダー用の記事だったのであまり個人的な話はできなかったんですが、実は進級試験中でした(汗) 昨日やっと自己採点も終えて、なんとか進級はできそうってことで一息つけました。2日で400問、計14時間のテストでかなり疲れました(笑) 進級結果は3月なので実際まだわからないんですが、及第点は取れているはずです! 僕の大学で5年から6年になる進級試験で6割取っていれば、一年後の国試は安泰らしいので順調に勉強すれば医者になれるらしいです。ただし順調に勉強すればの話ですが、、、嫌な予感。 さて今回ですが、Vimerになりたい!ということで第一歩を踏み出そうと思います…

  • 扇形を描画したい初心者の格闘日記〜SVG vs Canvas〜

    どうも、わくばです! ReactNative アドベントカレンダー10日目です! アドベントカレンダーは初投稿で、拙い内容かもしれないんですが箸休め程度に楽しんでいただければと思います。 プログラミングはまだ初めて半年も経っていない初心者ですが、エンジニアの方々ともっと絡みたいと思って今回アドベントカレンダーに参加させていただきました。 Twitterやってるのでぜひぜひフォローお願いします!! Follow @PYEcracker99 概要 こんな感じのUIを作るために、扇形の描画について、SVGとCanvasを用いて検討してみた記事です。 完成イメージ 目次 自己紹介 動機 扇形の条件 使…

  • Define-and-RunとDefine-by-Run

    わくばです! 最近は薬理学研究室の手伝いでTensorFlowを勉強しているんですが、使っていてすごく違和感があるというか、使いづらいんですよね。 なんでかなと調べてみたら「Define-and-Run」という設計思想がどうやら関わっていそうなので今回記事にしてみました。 Define-and-Runを考えるにあたってよく引き合いにだされるのがDefine-by-Runです。それぞれ日本語で訳すと前者は「定義して実行する」、後者は「実行ごとに定義する」と言った感じでしょうか。 Define-and-Runというのはまず予め静的なネットワークを記述した後、実際にデータを用いて実行する形式です。こ…

  • <自作アプリを作りたい ネイティブアプリ編 React Native> #5 〜useStateを学ぶ〜

    わくばです! 今回はuseStateについて説明してみます。useStateというのは関数コンポーネントの状態を管理する機能を言います。状態ってなんぞやと思うかもしれませんが、これは具体的にコードで示した方がわかりやすいので、単純な機能を作ってみました。 useStateの例 まず以下にソースコードを添付します。水の温度をState(状態)として管理し、それによって水の物性変化を管理しています。 基本的な文法としてはconst [xxxx,setXxxx]=useState[初期値]という形を取ります。xxxxの部分は自分で好きなように名前を決められます。ただしsetのあとは大文字です。以下の…

  • <自作アプリを作りたい ネイティブアプリ編 React Native> #4 〜コンポーネントとpropsの概念〜

    わくばです! だいぶブログを放置してしまいました笑 決して勉強をサボっていたわけではなく、UdemyでしばらくReact Nativeの講座を受けていたんです。 ちなみにシリーズのタイトルが「AIアプリを作りたい」から「自作アプリを作りたい」に変わっているのは、本当に作りたいアプリが決まったからです。もともとAIアプリとしていたのは、AIの勉強とモチベーションを無理やりくっつけるためだったので特に作りたいもののイメージはありませんでしたし。実際に作るアプリの技術的な設計は今度作ろうと思っています。 そんなことは良いとして、以下にUdemyで受けた講座のリンクを張っておきます。まだすべて終わって…

  • <AIアプリを作りたい ネイティブアプリ編 React Native> #3 〜構造化とスタイリングを学ぶ〜

    わくばです! 今回はUdemyの講座でReact NativeによるUI(ユーザーインターフェース)の作り方を勉強したのでそこで感じたことと、今後どう勉強していくかについて考えていきます。 構造化 React NativeのUIはJSXというマークアップ言語とJavaScriptを用いて構築するそうです。JSXは< >を使って記述されるもので一見本当にHTMLに見えます。正確にはXMLというマークアップ言語を基礎にしているのでHTMLとは違うそうなのですが、HTMLと比較して勉強したほうが実用的で一石二鳥なのでHTMLになぞらえてお話します。 構造化の部分はこんな感じです。 構造化の部分 <V…

  • <AIアプリを作りたい ネイティブアプリ編 ReactNative> #2 〜環境構築 Node.js & Expo〜

    わくばです! 今回はReactNativeの環境構築を行いました。かなり大変でした笑 JavaScriptは環境構築不要とかいって舞い上がった次の瞬間これです。先が思いやられます。 Homebrewインストール Nodebrewインストール Node.jsインストール Expoインストール シュミレータのインストール Homebrewインストール まずHomebrewのインストールを行いました。いやしなかったんかい、って感じかもしれませんが、今日はじめて知りました笑 これがないとなにかできないといったことはないです。ほんとに必須なのはNode.jsとExpoなので。これはExpoの公式ドキュメ…

  • <AIアプリを作りたい ネイティブアプリ編 ReactNative>〜JavaScriptの基本を学ぶ #1〜

    わくばです! かねてからアプリ開発を学びたいと考えていたので、ネイティブアプリの開発から勉強をしていこうと思います。 無論AIの勉強もしていきますが、E資格取得までのつもりです。 アプリ開発を学ぶ理由 何を記事にするのか なぜReactNativeからはじめるのか 本題 環境構築が不要! 視覚的にわかりやすい まとめ アプリ開発を学ぶ理由 アプリ開発を学ぶ理由というか、AIを突き詰める意味が僕にはないからです。というのも医学における僕の分野は最終的には僻地医療で、総合診療や家庭医療、救急医療といった分野になるからです。研究室でより精度の高いAIアルゴリズムを作ることが目標ではないのです。 つま…

カテゴリー一覧
商用