タグ

algorithmとprogrammingに関するAmaiSaetaのブックマーク (30)

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

    こんにちは、square1001 です。 現在は東京大学の学部 1 年生をしています。私は中学 1 年の頃からプログラミングをやっていて、特にアルゴリズムが大好きです。AtCoder をはじめとする 競技プログラミング にも取り組んでいて、中高生のときは 情報オリンピック にも参加していました。 記事では、アルゴリズムや競技プログラミングに興味がある方、あるいはプログラミングをやっているけどアルゴリズムをよく知らない方に アルゴリズムはどんなもので アルゴリズムを使うとどんな問題が解けて アルゴリズムが地球のように広く、多様で、奥深く、そして楽しいこと を知ってもらおうと思っています。 アルゴリズムの世界へようこそ 時代は 2020 年代に突入し、急速に IT 化 や DX が進んでいく中で、問題を効率的に解くアルゴリズム技術の重要性が、ますます高まっています。そして、アルゴリズムは、世

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

    オープンソース版 Open Data Structures 日語訳の PDF ファイルを以下で公開しています。最新のソースコードは GitHub のリポジトリ https://github.com/spinute にあり、適宜こちらの PDF ファイルに反映しています。 以下のものは C++ 版です(Java 版はこちら、疑似コード版はこちらにあります)。 目次 訳者まえがき 書の読み方 訳者謝辞 なぜこのを書いたのか 謝辞 第1章 イントロダクション 効率の必要性 インターフェース 数学的背景 計算モデル 正しさ、時間計算量、空間計算量 コードサンプル データ構造の一覧 ディスカッションと練習問題 第2章 配列を使ったリスト ArrayStack:配列を使った高速なスタック操作 FastArrayStack:最適化された ArrayStack ArrayQueue:配列を使ったキュ

    OpenDataStructures.jp
  • できるだけ嘘を書かずに計算量やオーダーの説明をしようとした記事 - えびちゃんの日記

    計算量についてのお話です。対象は、プログラミング経験はあるが計算量のことを知らない初心者から、計算量のことを知っているつもりになっている中級者くらいです。 数式を見たくない人にとっては読むのが大変かもですが、深呼吸しつつ落ちついて読んでくれるとうれしいです。 それから、この記事が自分には合わないな〜と思ったときは、(別の記事を Qiita とかで検索するよりも)この記事の一番下の 参考文献 にあるを読むことをおすすめします。Amazon の試し読みで無料で読めます*1。 TL; DR 関数の増加度合いのことをオーダーと呼ぶよ 計算量は、入力サイズ(など)を受け取ってアルゴリズムの計算回数(など)を返す関数だよ その関数のオーダーについての議論がよく行われるよ オーダーを上から抑えるときは \(O\)、下から抑えるときは \(\Omega\) を使うよ オーダーを上下両方から抑えたいときは

    できるだけ嘘を書かずに計算量やオーダーの説明をしようとした記事 - えびちゃんの日記
  • 「DIは必ずしも善ではない」| Dependency injection is not a virtue by DHH

    DHHの Dependency injection is not a virtue(2013) という記事は有名ですが、ちゃんとした日語訳が意外とないようなので、書き出してみて思ったことを要約してみた。[1] Rubyエンジニアの中には、何も考えずに他のモデルのnewを書いてる人の割合が多いという(コードレビュー時のヒアリングによる)体感があり、また8年前の記事なので経験の浅い人は読んだことがない人もいると思う。該当する方は是非読んでほしい。 全部読む時間が無い人は要約へ. 原文と訳文 In languages less open than Ruby, hard-coded class references can make testing tough. If your Java code has Date date = new Date(); buried in its guts,

    「DIは必ずしも善ではない」| Dependency injection is not a virtue by DHH
    AmaiSaeta
    AmaiSaeta 2021/06/28
    「X言語での最善手を全ての言語での最善手と思い込む」という事はやってしまっていそうなので自戒したい……(実際、脳内がHARD CODE ALERT!だったので)
  • CS50 for Japanese: コンピュータサイエンスの入門 – 当ウェブサイトは、Creative Commons ライセンスに基づいて管理されています。

    お知らせ: 2022/9/1 CS50 を活用した非営利/協賛企業による「コロナ学生支援」プロジェクトを実施中 ▼ 学生の方へ:CS50 の学習(履修証明書の取得)を一緒に取り組むプロジェクト CS50日語版の翻訳コントリビューターである CODEGYM が主催する、非営利/無償のプロジェクト「CODEGYM Academy (外部リンク)」は、昨年に続き2022年度(春/秋)も、キャリア選択を控えた学生に対し、以下の企業の協賛により無償で17週間のプログラミング教育カリキュラムを提供します。 CODEGYM Academy 協賛企業(2022年) https://codegym.jp/academy/ 今年度のエントリーは締め切りました — ようこそ! このページは、ハーバード大学 CS50 の日語版翻訳プロジェクトのページです。当サイトのドメインに掲載されているコンテンツは、Cre

    AmaiSaeta
    AmaiSaeta 2021/05/14
    米ハーバード大のコンピュータサイエンス入門講座「CS50」の日本語化コンテンツ。
  • Suffix Array - Qiita

    これは「データ構造とアルゴリズム Advent Calendar 2018」9日目の記事です. はじめに Suffix array1 はよく知られたデータ構造のひとつです.1990年に提案2されて以来,その使われ方は多岐にわたります.記事では,この suffix array の基事項として, suffix array とは何か suffix array を全文索引として用いる方法 を紹介したいと思います. パターンマッチングと全文索引 パターンマッチング とは,文字列 $T$ から,パターンと呼ばれる文字列 $P$ を探す問題です.たとえば, $T =$ 麒麟鼬蝙蝠駱駝蝦蟇鼈樹懶鼠膃肭臍羆狒狒鰐麒麟猩猩鼠鼠鼠鼠鼠蟒蛇鼈鼬羆蜥蜴駱駝羆麒麟鼈鼬狒狒狒狒羆蝙蝠膃肭臍麒麟蝙蝠鼬蜥蜴鼬狒狒蝮樹懶鼬羆蝮膃肭臍麒麟羆駱駝蝙蝠蟒蛇狒狒蝙蝠樹懶鼈蜥蜴駱駝羆鼬羆樹懶犀鰐蝙蝠鼠狒狒蝦蟇鼬蜥蜴鼠蝮蝦蟇蜥蜴龍麒

    Suffix Array - Qiita
    AmaiSaeta
    AmaiSaeta 2018/12/09
    検索対象文字列から特定の文字列を探す時のアルゴリズム。この時、全ての合致する文字列の位置情報を得る事が出来る。 O(m log n)
  • ID生成大全 - Qiita

    セッションIDやアクセストークン、はたまた業務上で使う一意の識別子など、いろんなところで一意のIDを生成しなきゃいけないケースが存在します。 そこで世間で使われているIDの生成方法について調べてみました。 選択基準 ID生成における要求として、以下の観点が上げられるかと思います。 生成の速度 大量にデータを短期間で処理し、それらにIDを付与する場合、ID生成そのものがボトルネックとなることがあります。 推測困難性 IDを機密情報と結びつける場合、IDを改ざんされても、機密データが見れないようにできている必要があります。 順序性 採番した順にデータをソートする必要がある場合は、IDがソートキーとして使えないといけません。 それぞれについて各生成手段を評価します。 ID生成の手段 データベースの採番テーブル 採番用のテーブルを作り、そこで番号をUPDATEしながら取得していくやりかたです。古い

    ID生成大全 - Qiita
  • C/C++で整数の桁数を求める場合、1番処理が速いのはどの方法でしょうか?

    AmaiSaeta
    AmaiSaeta 2017/01/29
    sharowさんの回答のコード見て変な笑いが出た。
  • http://f-server.ics.kagoshima-u.ac.jp/~fuchida/algorithm/alg08-%E6%8E%A2%E7%B4%A2%E3%81%A8%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5.pdf

  • Site is undergoing maintenance

    Site will be available soon. Thank you for your patience!

    AmaiSaeta
    AmaiSaeta 2014/12/06
    intのビット長について言及が在るということはC/C++か? 右シフトが論理か算術かは実装依存だった気がするけど……?
  • ふたつのIterator - プログラマーの脳みそ

    コードを書いているとたまにふたつのIteratorをいっしょに回すコードを書くはめになる。 /** ふたつのItaratorを並べて回すサンプル */ static boolean compare1(List<String> list1, List<Integer> list2) { if (list1.size() != list2.size()) { throw new IllegalArgumentException("個数の不一致"); } Iterator<String> ite1 = list1.iterator(); Iterator<Integer> ite2 = list2.iterator(); // 敢えてショートサーキットしない&演算を用いる while (ite1.hasNext() & ite2.hasNext()) { String v1 = ite1.nex

    ふたつのIterator - プログラマーの脳みそ
    AmaiSaeta
    AmaiSaeta 2014/03/16
    "そもそもfor-eachがIteratorそのものを回せればこんなことにはならないんだけど。" そこでC++ですよ、というのは冗談として、複数のイテレータを指すイテレータというアイディアは良いなと。
  • グーグルはコードの品質向上のため「バグ予測アルゴリズム」を採用している

    グーグルでは、社内のプログラマによって作り出される大量のコードの品質を保つため、チェックイン前にユニットテストとコードレビューが行われているそうです。しかし、コードが大量になってくると、ユニットテストやレビューをすり抜けるバグも少なからず発生します。 そこでコードの品質をさらに高めるために、グーグルでは「バグ予測アルゴリズム」を採用。バグがありそうな部分をレビュアーにアドバイスする仕組みを採用したとのこと。 そのバグ予測アルゴリズムとはどんなものなのか。Google Engineering Toolsブログに投稿されたエントリ「Bug Prediction at Google」(グーグルにおけるバグ予測)で説明されています。 ソースコードの修正履歴を基に予測 コードの中にバグがありそうな箇所を分析する手法としては、「ソフトウェアメトリクス」がよく用いられます。これはコードを静的に分析して、

    グーグルはコードの品質向上のため「バグ予測アルゴリズム」を採用している
    AmaiSaeta
    AmaiSaeta 2011/12/16
    潜在バグ予測なんて分野が在るとはしらなんだ。こういったスコアをGithubやらsourceforgeやらが自動算出してくれるとうれしいかもね。
  • 「ソートも、サーチも、あるんだよ」 ~標準C++ライブラリにみるアルゴリズムの面白さ

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    「ソートも、サーチも、あるんだよ」 ~標準C++ライブラリにみるアルゴリズムの面白さ
    AmaiSaeta
    AmaiSaeta 2011/07/30
    /人◕ ‿‿ ◕人\「僕と契約して(ライブラリの豊富な)(Java|C#)プログラマになってよ!」 C++「その必要はないわ!」 まで理解した(ぇ
  • 常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)

    TwitterのTLで知ったのだが、少し前に海外掲示板で"sleep sort"というソートアルゴリズムが発明され、公開されたようだ。このアルゴリズムが面白かったので紹介してみる。 Genius sorting algorithm: Sleep sort 1 Name: Anonymous : 2011-01-20 12:22 諸君!オレは天才かもしれない。このソートアルゴリズムをみてくれ。こいつをどう思う? #!/bin/bash function f() { sleep "$1" echo "$1" } while [ -n "$1" ] do f "$1" & shift done wait example usage: ./sleepsort.bash 5 3 6 3 6 3 1 4 7 2 Name: Anonymous : 2011-01-20 12:27 >>1 なん…だと

    常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)
    AmaiSaeta
    AmaiSaeta 2011/05/20
    アホやw | しかしこういう発想が出来るというのは素晴らしい。 | 最初タイトルだけ見て『寝てる間に小人さんが……』的なイッちゃってるモノかと思ったw
  • ジャンル別ゲームの作り方とアルゴリズムまとめ - ネットサービス研究室

    ゲームの作り方とアルゴリズムをジャンル別にまとめてみました。ゲーム制作や、プログラミングの勉強用にご活用ください。言語別ゲームプログラミング制作講座一覧もあわせてお読みください。 リンク切れがおきていたものは、URLを表示しておくので、Internet Archiveなどでキャッシュを表示させてみてください。 RPG ゲームの乱数解析 乱数を利用した敵出現アルゴリズムの解説 各種ゲームプログラム解析 FF、ドラクエ、ロマサガのプログラムの解析。乱数の計算など ダメージ計算あれこれ(http://ysfactory.nobody.jp/ys/prg/calculation_public.html) ダメージの計算式 エンカウントについて考えてみる エンカウント(マップでの敵との遭遇)の処理方法いろいろ RPGの作り方 - ゲームヘル2000 RPGのアルゴリズム ドルアーガの塔 乱数の工夫の

    ジャンル別ゲームの作り方とアルゴリズムまとめ - ネットサービス研究室
  • d.y.d.構文解析の話をしよう

    16:46 08/03/30 YZ1.DLL 0.30 リリース しました。 具体的には、ヘッダの格納ファイル数フィールドに実際より大きい値が入ってると変なとこ読もうとして落ちるバグ修正。 GreenPad の修正は来週くらいには…。 Booooooost Boost 1.35.0 来てました。 Asio と Fusion と GIL の三枚看板がでかいですが、Bimap が地味に便利だ。 あと、mbさんのEgg のレビューが明日からでしょうか。(また スケジュール から消えてますが…Protoが入る前までロールバックしてる?) 他人事ながらドキドキ。 17:36 08/03/28 ケース 十年来の疑問なんですが、"case" に単独で対応する日語ってなんになるんですかね。 "case-insensitive" や "lowercase" の "case"。単に "case-insens

  • ゲーマーでなくても仕組みぐらいは知っておきたいアルゴリズムx40

    高校生の時、数学の先生がこう言いました。 ゲームなんて、開発者が作ったルールの上で遊ばれるだけだ。 と。 その時、ゲーマーな自分はこう思いました。 ゲーマーは、開発者が作ったルールの上で遊ばれたい。 と。 というわけで、普段何気なくプレイしているゲームには、どのようなルール(アルゴリズム)があるのか。それを知るために、いろいろなゲームのアルゴリズムなどを解析しているページへのリンク集を作りました。 ほとんどのゲームのアルゴリズムは正式に発表されていないので、ユーザーの手による逆解析だったり、大学の研究による真面目な考察だったりします。(リンク先には、一部アルゴリズムと呼べないものも含まれています) 各種ゲームのプログラム解析 ドラクエ、FF、ロマサガのプログラム解析 DQ調査報告書(リンク切れ) ドラクエの物理ダメージ計算式は質的にどれも同じだが、細かい部分で微妙に違う RPG INST

    ゲーマーでなくても仕組みぐらいは知っておきたいアルゴリズムx40
    AmaiSaeta
    AmaiSaeta 2007/11/28
    (とりあえず斜め読みのみ) | 書籍にShort Codingが入っているのを見てニヤッとしてしまった。
  • ボゴソート - Wikipedia

    ボゴソート (bogosort) は、ソートのアルゴリズムの一つ。平均的な計算時間はO(n×n!)で、非常に効率の悪いアルゴリズムとして知られている。安定ソートではない。「bogo」は、"bogus"[1]に由来する。 英語では、random sort(ランダムソート), shotgun sort(「数撃ちゃ当たる」ソート), monkey sort(「猿でもできる」ソート) などといった表現がある。なお最後のものは「猿でもできる」というよりも、無限の猿定理を指しているかもしれない。 トランプを順に並べる場合を例にすると、次のようになる。 トランプ52枚の束を放り投げて、ばらばらにする。 1枚ずつ無作為にすべてを拾い集める。 ソートされているか確認する。もしソート済みでなければ、1から3までの手順を繰り返す。 カードの束をひたすらシャッフルし続けて順番に並ぶまで待つアルゴリズムと考えてもよ

    AmaiSaeta
    AmaiSaeta 2007/08/24
    これはひどいwwww
  • Karetta|Gaucheプログラミング|「Lisp脳」の謎に迫る - Schemeプログラマの発想

    この原稿の最新版について この原稿に加筆した最新版が書籍「プログラミングGauche」に収録されています。 引用や紹介をされる方はなるべく書籍収録版を参照してください。 他の言語のプログラマがSchemeプログラムを書くとき、 どうしても発想が手続き的(procedural)になりがちです。 LispプログラマやSchemeプログラマの発想は手続き的な発想とはどうも違うらしい、 ということは分かるのですが、具体的に何が違うのでしょうか? ここではこの謎に迫ってみましょう。 実例 例えばこんな例題があります。 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 どうしてプログラマに・・・プログラムが書けないのか? (原題: Why

    AmaiSaeta
    AmaiSaeta 2007/05/29
    メウロコ。へぇーなるほど。
  • 地球にやさしいアルゴリズム---目次 - 地球にやさしいアルゴリズム:ITpro

    アルゴリズムを構成している楽しい仕組みを紹介しながら,あなたに「おおっ」と言わせることが,連載の最初の目的です。興味を持てたなら,アルゴリズムに関する文献や情報を抵抗なく読めるようになるはずです。アルゴリズムを使いこなしたり,作ることも無理なくできるようになるでしょう。 まずはいろいろなアルゴリズムの面白いところを見て,楽しんでみましょう 第1回 ナンプレを解いてみよう 第2回 パズルみたいに楽しいデータ圧縮 第3回 「場面」の移り変わりに注目する 第4回 できるだけ短いルートでゴールに到達する 第5回 隣の区画と異なる色で地図を四色に塗り分ける 第6回 上手なアルゴリズムの見つけ方 第7回 多対多の関係を賢く扱う 第8回 倉庫番を解くアルゴリズム 第9回 プロトコルを実現するアルゴリズム 第10回 麻雀の役を判定する 第11回 プログラム同士の対戦ゲーム 第12回 対戦ゲームの戦略を考

    地球にやさしいアルゴリズム---目次 - 地球にやさしいアルゴリズム:ITpro