「クイックソート」を含む日記 RSS

はてなキーワード: クイックソートとは

2025-01-31

これからプログラマーになりたい学生

大体のもの日本語アルゴリズムデータ構造解説があります

でも、時々、こういうのがあります

https://www.cs.tufts.edu/comp/150FP/archive/hans-boehm/ropes.pdf

Rebalancing

Rebalancing produces a balanced version of the argument rope. The original

is unaffected.

(中略)

Many variations of this approach are possible. Our balance condition was expressed

in terms of length, and our algorithm tends to move long ¯at ropes close to the

root. One could also rebalance purely in terms of node count.

Ropeくそ遅いのでリーフノードリンクリストでつなごうとしたら、訳が分からなくなりました。

適当にやってはいけないと思い、ググったら、Ropeリバランスのやり方を解説した奴は英語の奴しかありませんでした。

から英語はまじめにやったほうがいいです。

あと、リンク先を読めばわかるけど、数学でおなじみの記号がいたるところに出てきます

数学アレルギーがあるとまじで嫌悪感で胸いっぱいになります

こうはならないように数学はまじめに勉強したほうがいいです。

数3Cまで取ったほうがいいです。

大学に行けば体系的にアルゴリズムデータ構造最先端技術を教えてくれますが、情報系の大学は数3Cが必須です。

そして、ネットに転がってるデータ構造解説書は数3Cを勉強していることを前提に書かれていることが多いです。

微分積分が出た時代の数1Aと数2しかとってないので、この手の本はマジで訳が分かりません。

から、おじさんは高校生向けの優しい、アルゴリズムデータ構造の本で勉強しました。

そして、低賃金プログラマーになりました

なぜかというとライブラリーしか触れず、リンクリストやAVL木、クイックソートや基数ソートをかじったぐらいのプログラマーは腐るほどいるからです。

から、君たちはおじさんのようにはなるな。

2024-02-04

基数ソートって分割統治法に入んねえの?

ワイ:

基数ソート分割統治法を利用しているとは考えられませんか?

ChatGPT:

基数ソートRadix Sort)は、分割統治法(Divide and Conquer)を利用しているとは一般的には考えられません。基数ソートは、数値や文字列などのキーを持つ要素を、そのキーの各桁について個別ソートすることによって全体をソートするアルゴリズムです。通常、最も下位の桁から始めて、各桁について安定ソート(たとえばカウンティングソートバケットソート)を適用していきます

分割統治法は、問題をより小さなサブプロブレムに分割し(Divide)、それらのサブプロブレムを解決して(Conquer)、最後にサブプロブレムの解を統合して(Combine)元の問題の解を得るアプローチです。典型的分割統治法アルゴリズムには、クイックソートマージソートがあります

基数ソートはこのアプローチに従わず、代わりに全体のデータセットに対して桁ごとのソートを繰り返すことで全体をソートします。各桁のソートデータセット全体に対して行われ、データセットをサブプロブレムに分割してそれぞれを独立解決し、後で統合するというプロセスはありません。そのため、基数ソート分割統治法を利用しているとは一般的には見なされません。

ただし、基数ソートの各ステップでサブプロブレムに分けることなく全体のデータセットに対して操作を行うという点で、分割統治法概念の一部と見ることができるかもしれませんが、これは分割統治法典型的使用からは逸脱しています

ワイ:

上の桁から同じキーを持つグループに分割して階層的に並べていくのでは駄目なんでしょうか?

ChatGPT:

基数ソートを上の桁から開始して同じキーを持つグループに分割し、階層的に並べていくというアプローチは、実際には「Most Significant Digit (MSD) Radix Sort」と呼ばれる基数ソートバリエーションであり、有効手法です。MSD基数ソートは、最も上位の桁(Most Significant Digit)から始めて、各桁ごとにデータグループ化し、それぞれのグループに対して再帰的に同じプロセスを適用していきます。このアプローチは、ある意味分割統治法の考え方を取り入れています

MSD基数ソートの特徴:

分割: 最も上位の桁に基づいてデータ複数バケットグループ)に分割します。各バケットは同じ桁の値を持つ要素を含みます

統治: それぞれのバケットに対して、次に下位の桁に基づいてソート再帰的に適用します。これにより、各バケット内の要素がさらに細かく分類されます

結合: 最終的に、すべてのバケットを順序通りに結合して、ソートされた全体のリストを得ます

このアプローチでは、データセットをサブセットに分割し、それぞれのサブセットに対して問題再帰的に解いていくという分割統治法原則に従っています。ただし、MSD基数ソートは、分割統治アルゴリズム典型的な例(マージソートクイックソートなど)とは異なり、再帰的な過程でサブセット間の「統合ステップ必要ありません。各再帰的なステップでのソート完了した時点で、要素は既に部分的ソートされた状態になっているため、最終的な結合は単純なリストの連結に過ぎません。

MSD基数ソートは、特に固定長のキーを持つデータや、文字列などの可変長データソートする場合有効手法です。しかし、このアプローチは、特にキー分布が均一でない場合や、データセットが大きい場合には、メモリ使用量が大きくなる可能性があるため、実際の使用状況に応じて適切なソートアルゴリズム選択することが重要です。

分割統治法じゃん。

2024-02-03

”イクイックソート

分割統治を利用した整列法はどれか 【アルゴリズム】 - ITを学ぶ

manabuit.com

https://manabuit.com情報処理試験過去問

2019/11/23 — そして、次には、100の位と繰り返していくことで、ソートをさせます逐次加法に分類されます。 正解. イ クイックソート. あらためて問題と正解.

( ̄m ̄〃)ぷぷっ!

2023-04-22

プログラマってアルゴリズムやった方がいいの?

5年目だけどそこら辺ほぼ無知

n^2以上にはしないようにはしてるしパフォーマンス必要な時は何かしらのソートで書くけど何ソートをかけと言われて書けるのはバブルソートクイックソートだけ

2022-08-27

anond:20220827013326

クイックソート質問に答えられないバカばかりで疲れた面接官です。面接の前に聞いてほしい

anond:20220827012159

やけにクイックソートにこだわるね

クイックソート質問に答えられなくて就活失敗したのかな?

バカエンジニアをはじく面接問題集

ここまでで70%が落ちる

ここまででさらに70%が落ちる

残りの9%にやっとまともな問題を出すことができる

anond:20220827003642

から答えてみろよ「知ってる」だと答えになってないだろ?クイックソート計算量知ってるなら言ってみろよほら早く

anond:20220827002833

それで、低学歴エンジニアってのは具体的に何?

中卒? 高卒? 専門卒?

高卒の俺でもクイックソートくらい知ってるんだが、どうやって学歴を判定するんだ?

低学歴エンジニアを一発で見分ける方法

クイックソート時間計算量は何ですか?」

これで面白いほど一発で見分けがつく

2022-08-13

クイックソート計算

クイックソート計算量を答えられない人が多すぎる。クイックソートだぞ。クイックソート。クイックに答えてくれよ。経験10年ですみたいな人がこんな基本的質問にも答えられないなんて本当にビックリするんだよ。クイックソート計算量だよクイックソートクイックソートが何かも知らないなんてどういうクイックな勉強ばっかしてきたんだよ。土日も勉強してるんじゃないのかよ。

2021-06-17

経験から1ヶ月でWeb企業就職する勉強法

取り上げた技術は、本格的な開発でも役に立つもので、最も学習コストが低いものを選んだ。

重要度が低いものは載せていない。たとえばHTMLCSSなんてググりながら書けば全く問題ない。Bootstrapなどのフレームワークも全くやる必要はなく、仮に就職先で使っていたら覚えればいい。

逆に言えば以下に挙げる技術は、そもそも概念自体プログラミングにとって普遍的ものであり、(基礎的な部分を)調べながら使うようではエンジニア失格ということ。

基本的現在では、バックエンドフロントエンド運用保守全てができないエンジニア価値は無い。

以下に挙げた技術(①⑤⑥は他の言語フレームワーク代替可能)が身に付いていなければまともな企業就職することは難しい(もちろん、下らない業務システム下請けで作ってる底辺企業には入れるだろうが)。

経験者でも、これらができない/わからないのは、相当恥ずかしいことだと思った方がいい。

特定言語フレームワークの書き方を知っていること自体意味は無い。

重要なのは、他の言語フレームワークにも共通する基礎を理解すること・保守性やセキュリティなどの品質を高める使い方ができること。

PythonJavaScriptマスターする

この2つは習得が容易だし、今覚えておけば向こう10年腐ることはないだろう。

プログラミング言語完璧理解する必要がある。

基本的な構文や、よく使う標準ライブラリは勿論、高階関数クラス・非同期処理等の発展的な機能も知り尽くしていなければならない。

言語のみではなく、パッケージ管理単体テストタスクランナー等の周辺ツールの使い方も熟知している必要がある。

また、「リーダブルコード」や「コードコンプリート」に書いてあるような良い作法も身に付ける必要がある。


Gitの基本操作を覚える

Gitを使えないのはプログラマーとして論外。細かい機能は調べればよいが、

等の基本的フローは必ずできなければならない。


Linuxの基本操作を覚える

多くの場合、本番環境テスト環境Linuxサーバーであるから、以下のような基本的概念と使い方を知っておく必要がある。


Dockerの基本操作を覚える

環境構築、CIデプロイなどは、現在コンテナを使って行うことが当たり前になっている。

これも細かいことをすべて覚える必要はないが、Dockerfileの書き方や、docker-composeの使い方などは知っておかなければいけない。


⑤ Flaskを覚える

Flaskは、数あるWebフレームワークの中で最も簡単。本当に呆れるほど簡単で、Pythonさえ書ければすぐにアプリを作れる。

フレームワークを覚えること自体重要なのではなく、Web開発の基本を習得することが重要HTTPルーティングデータベースSQL認証セッション管理などは当然すべて覚える。

データベースは、就職したらMySQLPostgreSQLなどを使うことが多いかも知れないが、今はPythonの標準ライブラリにあるSQLite3を使えば十分。

作ったアプリを公開したければ、「Heroku」などにデプロイするのが良いだろう。

追記 2021/06/17 14:07

ブコメで指摘をいただきました。HerokuではSQLite3は使用できないようです。公式ドキュメントに従ってPostgreSQL使用して下さい。

SQLite3はファイルデータを持てる簡易DBなんだけど、Herokuデプロイしてもストレージ的な使い方はできないから、結局PostgreSQLを使う必要あるから注意してね。(DAOを丸ごと書き換える羽目になる)

参考: https://devcenter.heroku.com/ja/articles/sqlite3

ありがとうございます

Vue.jsを覚える

今の時代フロントエンドフレームワークなしで作るのはただのバカ

2021年現在実用的なフロントエンドフレームワークはReactとVueしかない。Vueの方が少し簡単なのでこちらを選んだが、JavaScriptをしっかり理解しているなら大差は無い。

フロントエンドには膨大なパッケージ群があって全部覚えるのは大変だが、とりあえずまずはVue完璧に使えればいい。Webpackの設定などは既存のものを流用すればいい。



基本的アルゴリズムを学ぶ

アルゴリズムは全てのコンピュータ技術の基礎であり、絶対に知っていなければならない。

高速フーリエ変換のような高度な数学必要ないが、クイックソート木構造のような基本的アルゴリズムは当然、その性質を知っていなければならない。

それらは言語組み込み関数や標準ライブラリでも使われており、理解していなければ、それらの機能を正しく使うことができない。

また、プログラムを読み書きする際には、そのコード計算量を見積もれなければならない。

セキュリティを学ぶ

セキュリティは言うまでもなく学ばなければならない。

有名な脆弱性攻撃手法XSSSQLインジェクション・CSRFなど)が何だか理解していて、その対策実装できなければならない。

各種暗号化技術署名などについても、実装の詳細は知らなくていいが、共通鍵暗号や公開鍵暗号などの特性理解する必要がある。

認証パスワード管理などを実装する際は、当然ベストプラクティスに従わなければならない。

2021-06-03

今日案件 おおざっぱにいうと?

え?ソート書くだけなのに遅いね クイックソート?よくわからん 遅い

バブルソートとかで、みんな速く作るのにおまえ、おせーんだよ

 

100円均一と、デパートなり、コンビニなりを比べて どうして高いんだ?ぐらいの勢で

お前は遅い もっと速く作れね-のか? いや 同じ品質だと ものすげー速いんですが・・・

そりゃ、結構な数のソートバブルソートで良い ような案件なら、まともに、メモリとか気にして、書いたら、そりゃ、開発遅いだろうねぇ

2021-05-03

anond:20210503063841

64個までの同時比較ができるSIMDがあるとする

この場合、最大64要素までとして

クイックソートバブルソート比較しろ

この64個までのSIMDがある場合、どの程度の高速化が見込めるが?

SIMDを使わない場合を1としてX倍で答えよ

ただしSIMDとそれ以外の命令セットの切り替えコストは0とする

2021-05-02

anond:20210502134802

なんというか、職業欄見たことがない

フリーターとか、正社員かいちいちチェックしないし

XXXプログラム、1から独力で作れる?

みたいな質問はするけど、前職について、そんな事聞かない

 

明示まではされていないことも含め

プログラムをきちんとつくれるかどうか?の世界であって

なんだろう

フリーターから世渡りに優れているとか

正社員から、ガッチガチに縛られているとか

それはこっちに指示の問題から、気にしたことがない

しろ、そうだなぁいつも言うけど

クイックソートマージソートバケツソート

 

メモリ CPUの 

速さは無限で、読み込み時間時間を1 書き込み時間2を2

 

その間CPUは止まっていて、並列演算はできないと考えるとして、

データは十分に乱数ソートされており位一意性はないとする

つのソートの打ち あなたはどれをつかうか?その理由は?

 

みたいなことしか聞かない

 

ここで重要なのは、答えではなく

あなたはどう考えるか?問題へのアプローチを聞いたことはある

 

ただし便宜上理由があるならCPU,メモリの速さが有限であり、さまざまなストールCPUメモリまちが発生するとしても良い)説明問題

 

ハードの条件により、適切な答えは違うという前提で

あなたはどう考えますか?

というアプローチ力をテスト

2021-04-24

anond:20210424113759

おれ、最初basicで、次にアセンブラで、それからCをやったけど、他の高級言語アセンブラもやらないでいきなりCやらさる学生って大変すぎるだろっておもってた。

クイックソートとか初めて見たのがCのコードで当時理解するのがめっちゃ大変だった記憶があるけど、のちにHaskellrubyコードをみたらすごいシンプルで、初学者の頃見てたら理解するの楽勝だったのにって思ったわ。

2021-02-26

20年前からかわらないんだよ。

こっちのほうが優れているよ

クイックソートなんだよ時代

なんでもかんでも、バブルソートじゃねーんだよ。もうちょっと硬度アルゴリズムつかえよ

という案件は。

まぁマージソートでもいいんだけど

クイックソートのほうが、いいんだ!クイックソートに書き換えろという、客ではなく上司や同僚というものはいつもいる。

わざわざマージソートを描き下ろしてんだけどという時にな

2021-02-08

とある女がプログラミングに救われた話

駄文なので最初にまとめておくと、知識ゼロ異業種から転職して何とかエンジニアとしての人生を始めました、という話。経歴がショボすぎて誰かの道標にすらならないだろうけど書き残しておく。実名で書く勇気はないので増田にて失礼。

・芽生え

PCを初めて触ったのは4歳の頃。

父が仕事で使うと言って、ThinkPadを買ってきた。

黒くてごついボディが幼心にぐっときたのを覚えている。この記憶があったためか、初めて自分で購入したPCThinkPadだった。


・小〜中学生

我が家インターネット開通。深夜に親が寝てからこっそり2chニコニコ動画を見ていた。PS2ドラクエ8をやってグラフィックに感動する。まだプログラミングという言葉は知らない。母親ヒステリー父親の拳骨に耐える日々だった。

高校生

地元高校に進学。友人とホムペ(死語)を作成html/CSS文字の色か変えられたりアニメーションをつけられることに気付く。この頃もまだプログラミングに目覚めない。プログラム理系の人がやるお仕事なんでしょ?という雑な認識であった。

大学

もちろん文系学部に進学。人の視線が怖かったので前を向いて歩けず会話もままならなかったが、制服可愛いという理由だけでお洒落カフェバイトを始める。私は阿呆だが、この阿呆さないしは無鉄砲さでエンジニアになったと言っても過言ではない。

・そして無職

新卒入社した会社を3ヶ月で退職。支えてくれる彼くんとかもいなかったので実家でお通夜してた。鬱も発症して薬漬けになった。対面で人と話すことが難しいため、テキストベース仕事ができる職を探し始める。ここでやっとプログラミング出会う。

・独学期間

何にせよ無職から時間は腐るほどある。ヨドバシでカモ丸出しの顔をしてThinkPadを買い、Java簡単アルゴリズム実装することから始めた。フィボナッチ数列を生成するとかクイックソート実装するとか。あと5日ぐらいかけてServlet/JSPMySQLTODOリストを作った。

ポートフォリオ作成期間

2ヶ月ほどJavaをやった頃、無謀にも機械学習に手を出し始める。本を一冊買って隅々まで読み込んだ。この頃から鬱が寛解し始める。プログラミングに夢中になって、1日12時間以上はPCの前に座ってひたすらコードを書いていた。不思議と疲れはなかった。ゲーム用に買ったデスクトップPCにそこそこ良いGPUがついていることが判明したので、Tensorflowモデルもどきを作り、AI(笑)を組み込んだポートフォリオwebアプリを3ヶ月かけて作成した。サンプルコードを超える範囲ドキュメントを読む、適宜技術書知識を補うなどしてなんとかオリジナルと言えるコードをひねり出すこともこの頃覚えたと思う。なお肝心のモデルチューニングは一切していないわ当然精度も悪いわでその筋の人が見たら鼻で笑うレベルであるが、一人でアプリケーションを作り切ることができたのは大いに自信に繋がった。

求職活動

ポートフォリオを持って5社ほど受け、うち1社の小さな受託企業内定を貰い、無事職にありつくことができた。文系経験第二新卒を雇う勇気を出してくれた会社には感謝しかない。

それから現在

会社規模が小さいからか、個人裁量が大きく、設計から実装テストまで何でも任せてもらえた。良き上司に恵まれ、主にUnityスマホアプリの開発を担当し、技術の奥深さ面白さに触れさせてもらった。自身実装担当したアプリが世に出ていくことの喜びみたいなものも味わえた。この会社は昨年度退職し、現在は500人規模の自社開発系企業iOSアプリエンジニアをやっている。スキルは未熟だし対人恐怖的なものも治ってはいないけど、私はプログラミングが好きで、エンジニアとして骨を埋めたいとか身の程知らずにも思っている。

ご覧の通り、私は幼い頃からプログラミングに触れたりモノづくりをしていたわけではない。むしろ目覚めは遅い方である。そういう人でも興味があるなら、ITエンジニア目指してもいいんじゃないか、そうであってくれ、という気持ちで書いた。読んでくれてありがとうプログラミングはいいぞ。

2021-02-07

anond:20210207023557

プロプレイヤー以外はDPとか普段書かないし、ライブラリ作者以外クイックソート普段書かないから、何の資料もなしにいざ書けと言われて困るのは分からなくもないんだよな

そういう面接するって分かってたら一通り復習してこいという話ではあるんだけど

ログイン ユーザー登録
ようこそ ゲスト さん