タグ

software-engineeringとdata-structureに関するnabinnoのブックマーク (19)

  • アルゴリズムの世界地図 - Qiita

    0. アルゴリズムとは? まず、アルゴリズムとは何かを説明します。(0 節の説明はスライド「50 分で学ぶアルゴリズム」 の説明を参考にして書きました) さて、次の問題を考えてみましょう。 問題: 1 + 2 + 3 + … + 100 の値を計算してください。 単純な方法として、式の通りに 1 つずつ足していく方法が考えられます。すると、以下の図のように答えが計算されることになります。 これで答え 5050 が正しく求まりました。これはれっきとした アルゴリズム であり、この問題を 99 回の足し算 で解いています。しかし、計算回数が多く、計算に時間がかかるのではないかと思った方もいると思います。 ここで、方法を変えて、「1 + 100」「2 + 99」「3 + 98」…「50 + 51」の合計を求めることで、1 + 2 + 3 + … + 100 の値を計算してみましょう。 50 個の

    アルゴリズムの世界地図 - Qiita
  • コピペするプログラマに足りないもの 〜 プログラミング脳の鍛え方 | Social Change!

    長くなったので先に三行でまとめておこう。 コピペするプログラマが生まれるのは教育の問題ではないか(仮説) 文法は学んでも処理の流れから考えることは教わっていない(根拠) ロジックを訓練するには脳内プログラミングが良いのでは?(提案) 少し前に私のMediumで、こんな記事を書いた。タイトルが言葉足らずだったおかげで、少し話題になった。「量産型プログラマを撲滅したい」 今回の記事では、この中で書いたコピペするプログラマがなぜ生まれるのか、どうすれば良いのか、考えてみたい。 どうすれば見分けられるのか 書いたプログラムを説明させてみれば、その人が、ちゃんと考えて作れる人か、コピペでしか作れない人か、すぐにわかる。自分の書いたプログラムの流れを説明できるということは「わかって書いた」ということだ。わかっていなければ説明できない。 「わかって書く」という一見すると当たり前のことができない人もいる。

    コピペするプログラマに足りないもの 〜 プログラミング脳の鍛え方 | Social Change!
  • GitHub - jwasham/coding-interview-university: A complete computer science study plan to become a software engineer.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - jwasham/coding-interview-university: A complete computer science study plan to become a software engineer.
  • Amazon.co.jp: アルゴリズムとデータ構造 (岩波講座 ソフトウェア科学 3): 石畑清: 本

    Amazon.co.jp: アルゴリズムとデータ構造 (岩波講座 ソフトウェア科学 3): 石畑清: 本
  • Bloom filter - Wikipedia

    A Bloom filter is a space-efficient probabilistic data structure, conceived by Burton Howard Bloom in 1970, that is used to test whether an element is a member of a set. False positive matches are possible, but false negatives are not – in other words, a query returns either "possibly in set" or "definitely not in set". Elements can be added to the set, but not removed (though this can be addresse

    Bloom filter - Wikipedia
  • セット (抽象データ型) - Wikipedia

    セット(英: set)あるいは集合とは、コンピュータプログラミングで用いられる抽象データ型の一種。順序のないデータの集まりを表現する抽象データ型であり、同一のデータは一つしか含まれないことが保証される。 重複したデータの挿入[編集] データの同一性は与えられた比較関数で判定されるので、外の文脈で同一かどうかは関数依存である。例えば文字列"hoge"と"HOGE"は異なるデータと見ることもできるし、大文字・小文字を区別せずに比較すれば(常に大文字化あるいは小文字化したもの同士を比較すれば)同一のデータと見ることもできるといった具合である。 そのような重複するデータを挿入しようとした場合はこれを処理する必要がある。 無視する 新しい物で置き換える 多重化する(→マルチセット参照) 狭義のセットにおいては重複データは無視されるか新しいデータで置き換えるかされる。もしここで多重化することを選択した

  • ブルームフィルタ - Wikipedia

    この項目では、確率的データ構造について説明しています。画像にぼかし効果を付加する画像フィルタについては「川瀬のブルームフィルター」をご覧ください。 ブルームフィルタ(英語: Bloom filter)は、1970年に Burton H. Bloom が考案した空間効率の良い確率的データ構造であり、あるデータが集合の要素である(集合に含まれている)かどうかの判定に使われる。ただし判定は正確ではなくて、含まれていないのに含まれていると誤って判定すること偽陽性(false positive)の可能性がある。しかし含まれているものを含まれていないと誤判定すること偽陰性(false negative)はない。なお集合に要素を追加することはできるが、集合から要素を削除することはできない(ただし、拡張をした counting filter であれば削除もできる)。集合に要素を追加していくにつれて偽陽性の

    ブルームフィルタ - Wikipedia
  • S式 - Wikipedia

    この記事には複数の問題があります。改善やノートページでの議論にご協力ください。 出典がまったく示されていないか不十分です。内容に関する文献や情報源が必要です。(2021年4月) 独自研究が含まれているおそれがあります。(2021年4月) マークアップをスタイルマニュアルに沿った形に修正する必要があります。(2021年4月) 出典検索?: "S式" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL S式の木構造 (* 2 (+ 3 4)) コンピュータプログラミングにおいて、S式[注 1](S-expression)はネストしたリスト(木構造)のデータである。 S式は、プログラミング言語Lispのために考案され、普及した。Lispでは、データだけでなく、ソースコードにもS式を使用する。 Lispの括弧書き

    S式 - Wikipedia
  • データモデル - Wikipedia

    データ・モデル文脈の全貌: データモデルは、格納されるべき情報 の詳細を提供し、その最終プロダクトが、コンピュータ・ソフトウエアの自作または購入の意思決定を支援する、アプリケーションまたは、機能仕様の準備のための、コンピュータのソフトウエア・コードの生成であるとき主に使うものである。図は、ビジネスプロセスモデリングとデータモデルの間の相互作用の例である[1]。 データモデルは、アプリケーション設計のための計画として使うソフトウェア工学の抽象モデルの1つである。班・要員間の意思疎通のための事業データの文書化、組織化、そして特にデータの格納方法や利用方法のために利用される。 Hoberman(2009)によれば、「データモデルは、組織内での意思疎通を改善し、それによってより柔軟で安定したアプリケーション環境に導く、真の情報の部分集合を正確に説明するシンボルとテキストの集合を使う、事業とIT専門

    データモデル - Wikipedia
  • 抽象構文木 - Wikipedia

    抽象構文木(ちゅうしょうこうぶんぎ、英: abstract syntax tree、AST)は、通常の構文木(具象構文木あるいは解析木とも言う)から、言語の意味に関係ない情報を取り除き、意味に関係ある情報のみを取り出した(抽象した)木構造の木である。 理論的には、有限なラベル付き有向木である。また、演算子と変数や定数といったオペランドから成る数式などのようなものに対する抽象構文木を例にすると、分枝点は演算子、葉はオペランド(つまり、変数や定数)である。 抽象構文木は、構文解析によって直接得られる具象構文木と、最終的な意味表現などのデータ構造との、中間にあるものと位置付けることができる。コンパイラやインタプリタといったプログラミング言語処理系の場合は、中間表現のひとつであり、一部の最適化は抽象構文木の上の操作などによっておこなわれる。具象に対する構文がたとえばBNFによって規定されるように、

  • タプル - Wikipedia

    タプル(英: tuple、英語発音: [tʌp(ə)l, tuːp(ə)l]、タプル、トゥープル)とは、複数の構成要素からなる組を総称する一般概念であり、カタカナ語としては主に計算機科学において順序付けられた対象の並びを表すために用いられる。n 個でできた組を英語で「n-tuple」と書くことに由来し、数学では日語に訳す場合、通常「n 組」とし、タプルの概念そのものも組と呼ばれる。なお、 n-tuple は数学のタプルを意味するほか、同様に double、triple などの拡張として倍数詞の表現にも利用される(詳細は「倍#西洋数学における n 倍を表す表現」を参照)。 集合論では n 組 (n-tuple) とは n 個の対象 a1, a2, ..., an の順序づけられた組であり、普通、括弧でくくって (a1, a2, a3, ..., an) のように書かれる。 タプルが順序づけ

  • 抽象データ型 - Wikipedia

    出典は列挙するだけでなく、脚注などを用いてどの記述の情報源であるかを明記してください。 記事の信頼性向上にご協力をお願いいたします。(2022年5月) 抽象データ型(ちゅうしょうデータがた、英: abstract data type、ADT)とは、データ構造とその操作手続きを定義したデータ型、またはデータ抽象[注釈 1]の方法の1つ。通常のデータ型であれば変数宣言で変数に束縛されるものは値であるが、抽象データ型の世界において値に相当するものはデータ構造とその操作[注釈 2]のまとまり[注釈 3]である。 抽象データ型を用いない場合、データ構造またはデータの操作手続きのアルゴリズムの変更を行うとソースコード中にその変更部分が散在してしまい規模によっては修正困難となるが、データとその操作がひとまとめに記載されることになる抽象データ型においては、型の定義における実装部分を変更するだけで修正が完了

  • ポリモーフィズム - Wikipedia

    ポリモーフィズム(英: polymorphism)とは、それぞれ異なる型に一元アクセスできる共通接点の提供[1]、またはそれぞれ異なる型の多重定義を一括表現できる共通記号の提供[2]を目的にした、型理論またはプログラミング言語理論(英語版)の概念および実装である。この用語は、有機組織および生物の種は様々な形態と段階を持つという生物学の概念からの借用語である[3]。多態性、多相性と邦訳されることが多い。 ポリモーフィズムは、通常以下の三種に分けられる。 アドホック多相 (ad hoc polymorphism) 恣意的な型の集合に一つの共通接点を提供する。関数オーバーロード、Mix-inのいち実装、型クラスなど。 パラメトリック多相 (parametric polymorphism) 詳細化されていない型要素を内包する抽象的な型に記号表現を提供する。ジェネリクスや関数型言語の型構築子など。

  • ダック・タイピング - Wikipedia

    ダック・タイピング(英: duck typing)とは、Smalltalk、PerlPHPPythonRubyJavaScriptなどの動的型付けに対応したオブジェクト指向プログラミング言語に特徴的な、型付けのスタイル(作法)のひとつである。ダック・タイピングはポリモーフィズム(多態性)を実現する手段のひとつとして使われる[1]。 Pythonのリファレンスでは、ダック・タイピングは「あるオブジェクトが正しいインタフェースを持っているかどうかを決定するために、オブジェクトの型を見ることはしないプログラミングスタイルである」と説明されている。代わりに、オブジェクトが持つメソッドや属性(フィールドまたはプロパティ)が単純に呼ばれたり使われたりする。特定の型よりもインタフェースを重視することで、うまく設計されたコードは、ポリモーフィックな代入の許可による柔軟性を向上する[2]。 静的型付

  • データ構造 - Wikipedia

    二分木のデータ構造 ハッシュテーブルのデータ構造 データ構造(データこうぞう、英: data structure)とは、コンピュータプログラミングでの、データの集まりの形式化された構成である。格納された各データの参照や修正といった管理を容易にするための構成である[1][2][3][4] 。一定の関係性を持たせたデータ型のコレクションであり、データ値に適用するための関数や手続きも格納されることがある[5]。データの代数的構造とも言われる。 ソフトウェア開発において、データ構造についてどのような設計を行うかは、プログラム(アルゴリズム)の効率に大きく影響する。そのため、さまざまなデータ構造が考え出されている。多くのプログラムの設計において、データ構造の選択は主要な問題である。これは大規模システムの構築において、実装の困難さや質、最終的なパフォーマンスはベストのデータ構造を選択したかどうかに大き

    データ構造 - Wikipedia
  • MySQLを使ったアプリケーションを作るエンジニアが知るべきMySQLの内部構造とは? | Yakst

    MySQLを使ったアプリケーションを作るエンジニアが知るべきMySQLの内部構造について、データベースコンサルティング会社PalominoDBを経営するLaine Campbell氏による回答。MySQLを知るためには何をポイントに学習すればよいのかがよくわかる、DBAや開発者にとっても役立つ内容。 1. ストレージエンジン ストレージエンジンと、永続性、ロック機構、トランザクション処理の振る舞いや分離レベルといったストレージエンジンの基礎となる動きについての理解なしに、MySQL自体やモデルデータのコードをいじるべきでない。それに加えて、InnoDBのクラスタ化されたプライマリキーや、MyISAMの全文検索インデックスのようなコア要素も、極めて重要な情報だ。 2. インデックスのコンセプト 特に以下のような点について。 カバリングインデックス 連結インデックス インデックスを使ったソート

  • PHPでデータベースに接続するときのまとめ - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。PDO に関しては大きく変わっていない部分が多いとは思いますが, PHP 8.x 以降での動作保証はありません。 あらかじめ読んでおきたい記事 Qiita - 【PHP超入門】クラス~例外処理~PDOの基礎 by @7968 初心者がやりがちなミス 以下のどれかに1つでも当てはまるコードは見直す必要があります.付録にリンクを貼っておきましたので,「該当するかも?」という人はクリックして飛んで読んでください.太字にしてあるものは脆弱性に直結する危険度の高いものです. mysql_query などの非推奨関数を利用している SET NAMES あるいは SET CHARACTER SET などで文字コードを指定している そもそもデータベース

    PHPでデータベースに接続するときのまとめ - Qiita
  • Binary search tree - Wikipedia

    Fig. 1: A binary search tree of size 9 and depth 3, with 8 at the root. In computer science, a binary search tree (BST), also called an ordered or sorted binary tree, is a rooted binary tree data structure with the key of each internal node being greater than all the keys in the respective node's left subtree and less than the ones in its right subtree. The time complexity of operations on the bin

    Binary search tree - Wikipedia
  • 命名規則 (プログラミング) - Wikipedia

    この記事には複数の問題があります。改善やノートページでの議論にご協力ください。 出典がまったく示されていないか不十分です。内容に関する文献や情報源が必要です。(2018年12月) 独自研究が含まれているおそれがあります。(2018年12月) 出典検索?: "命名規則" プログラミング – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL 命名規則(めいめいきそく、英: naming conventions)とは、プログラミングを行う際にソースコード上の識別子(英: identifier)の名称となる文字列を決定するためのルールを定めたもの。ネーミング規則、ネーミング規約、あるいは命名規約とも呼ぶ。 通常は、ソースコードの可読性や視認性の向上、プログラミング効率およびメンテナンス性の改善などを目的としている。

  • 1