タグ付けされた質問 「algorithm」

アルゴリズムは、問題に対する抽象的な解決策を定義する明確に定義された一連のステップです。このタグは、問題がアルゴリズム設計に関連している場合に使用します。


26
リスト内のすべての要素が同一かどうかを確認します
次の機能が必要です。 入力:alist 出力: True 入力リストのすべての要素が標準の等価演算子を使用して互いに等しいと評価された場合。 False さもないと。 パフォーマンス:もちろん、不要なオーバーヘッドが発生しないようにします。 私はそれが最善だと思います: リストを反復する 隣接する要素を比較する とANDすべての結果のブール値 しかし、それを行うための最もPythonicな方法が何かはわかりません。 ショートサーキット機能の欠如は、早い段階で等しくない要素を持つ長い入力(約50要素以上)でのみ害を及ぼします。これが頻繁に発生する場合(どのくらいの頻度がリストの長さに依存するか)、短絡が必要です。最良の短絡アルゴリズムは@KennyTMのようですcheckEqual1。ただし、これにはかなりの費用がかかります。 パフォーマンスがほぼ同じリストで最大20倍 ショートリストのパフォーマンスは最大2.5倍 初期の不均等な要素を持つ長い入力が発生しない場合(または十分にまれにしか発生しない場合)、短絡は必要ありません。次に、最も速いのは@Ivo van der Wijkソリューションです。

30
文字マトリックスから可能な単語のリストを見つける方法[Boggle Solver]
最近、iPhoneでScrambleと呼ばれるゲームをプレイしています。このゲームをBoggleと知っている方もいるかもしれません。基本的に、ゲームが開始すると、次のような文字のマトリックスが得られます。 F X I E A M L O E W B X A S T U ゲームの目標は、文字をつなげて形成できる単語をできるだけ多く見つけることです。任意の文字で開始でき、その文字を囲むすべての文字は公平なゲームです。次の文字に移動すると、以前に使用された文字を除いて、その文字を囲むすべての文字が公平なゲームになります。したがって、上記のグリッドでは、例えば、私は言葉を思い付くことができLOB、TUX、SEA、FAME、などの言葉は、このゲームでは16になるだろうが、いくつかの実装が異なることができ、それ以上のN×Nの文字より少なくとも3つの文字、あってはなりません。このゲームは楽しさと中毒性がありますが、私は明らかにそれがあまり得意ではないので、可能な限り最高の単語を与えるプログラム(単語が長いほどポイントが多くなります)を作成することで少し浮気したいと思いました。 (ソース:boggled.org) 残念ながら、アルゴリズムやその効率などはあまり得意ではありません。私の最初の試みは、このような辞書(〜2.3MB)を使用し、組み合わせを辞書のエントリと一致させようとする線形検索を行います。これは、可能性のある単語を見つけるのに非常に長い時間がかかり、ラウンドごとに2分しか得られないため、単に適切ではありません。 Stackoverflowersがより効率的なソリューションを考え出せるかどうかに興味があります。私は主にBig 3 Ps:Python、PHP、Perlを使用したソリューションを探していますが、JavaまたはC ++を使用するものもクールです。 現在のソリューション: アダム・ローゼンフィールド、パイソン、〜20代 ジョン・フーイ、パイソン、〜3秒 ケントフレドリック、Perl、〜1秒 ダライアスベーコン、パイソン、〜1秒 rvarcher、VB.NET (ライブリンク)、〜1s Paolo Bergantino、PHP (ライブリンク)、〜5秒(ローカルでは〜2秒)
376 algorithm  puzzle  boggle 


4
PHP関数のBig-Oのリスト
しばらくPHPを使用した後、組み込みのすべてのPHP関数が期待どおりに高速であるとは限りません。キャッシュされた素数の配列を使用して、数値が素数であるかどうかを検出する関数のこれら2つの可能な実装を検討してください。 //very slow for large $prime_array $prime_array = array( 2, 3, 5, 7, 11, 13, .... 104729, ... ); $result_array = array(); foreach( $prime_array => $number ) { $result_array[$number] = in_array( $number, $large_prime_array ); } //speed is much less dependent on size of $prime_array, and runs much faster. $prime_array => …

16
深さ優先検索(DFS)と幅優先検索(BFS)を使用するのはいつ実用的ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 10日前休業。 DFSとBFSの違いは理解していますが、どちらを使用する方が実際的かを知りたいのですが。 誰かがDFSがBFSを打ち負かす方法の例を教えてもらえますか?

22
2つの長方形が互いに重なり合っているかどうかを判断しますか?
ユーザーから次の入力(2〜5の間)を作成するC ++プログラムを作成しようとしています。高さ、幅、x位置、y位置。これらの長方形はすべて、x軸とy軸に平行に存在します。つまり、すべてのエッジの勾配は0または無限大になります。 私はこの質問で述べられていることを実装しようとしましたが、あまり運がありません。 私の現在の実装は次のことを行います: // Gets all the vertices for Rectangle 1 and stores them in an array -> arrRect1 // point 1 x: arrRect1[0], point 1 y: arrRect1[1] and so on... // Gets all the vertices for Rectangle 2 and stores them in an array -> arrRect2 // rotated …

2
現代のC ++でクラシックな並べ替えアルゴリズムを実装する方法は?
std::sortアルゴリズム(そのいとこstd::partial_sortとstd::nth_elementC ++標準ライブラリからの)は、ほとんどの実装である複数の基本ソートアルゴリズムの複雑ハイブリッド融合そのような選択ソート、挿入ソート、クイックソート、マージソート、又はヒープソートなど、。 ここやhttps://codereview.stackexchange.com/などの姉妹サイトには、これらの古典的なソートアルゴリズムの実装のバグ、複雑さ、およびその他の側面に関する多くの質問があります。提供されている実装のほとんどは、生のループで構成され、インデックス操作と具象型を使用しており、正確性と効率性の観点から分析することは一般的に重要です。 質問:上記の古典的な並べ替えアルゴリズムは、最新のC ++を使用してどのように実装できますか? 生のループはありませんが、標準ライブラリのアルゴリズム構築ブロックを組み合わせて<algorithm> イテレータインターフェイスと、インデックス操作や具象型の代わりにテンプレートを使用 完全な標準ライブラリを含むC ++ 14スタイル、autoおよび、テンプレートエイリアス、透過的なコンパレータ、ポリモーフィックラムダなどの構文ノイズリデューサー。 注: ソートアルゴリズムの実装の詳細については、Wikipedia、Rosetta Code、またはhttp://www.sorting-algorithms.com/を参照してください。 ショーン親の規則(スライド39)、生のループであるforオペレータと長い2つの関数の組成より-loop。そうf(g(x));か、f(x); g(x);あるいはf(x) + g(x);生のループではありません、そしてどちらのループしているselection_sortとinsertion_sort以下。 私はスコットマイヤーズの用語に従い、現在のC ++ 1yをすでにC ++ 14として示し、C ++ 98とC ++ 03の両方をC ++ 98として示しています。 @Mehrdadのコメントで示唆されているように、回答の最後にライブ例として4つの実装を提供します。C++ 14、C ++ 11、C ++ 98、BoostおよびC ++ 98です。 答え自体はC ++ 14に関してのみ示されています。必要に応じて、さまざまな言語バージョンが異なる構文とライブラリの違いを示します。


1
ニューラルネットワークのトレーニングで非常に小さい値またはNaN値が表示される
Haskellでニューラルネットワークアーキテクチャを実装し、MNISTで使用しようとしています。 hmatrix線形代数のパッケージを使用しています。私のトレーニングフレームワークは、pipesパッケージを使用して構築されています。 私のコードはコンパイルされ、クラッシュしません。ただし、問題は、レイヤーサイズ(たとえば、1000)、ミニバッチサイズ、および学習率の特定の組み合わせによってNaN、計算に値が生じることです。いくつかの検査の後、非常に小さな値(次数1e-100)が最終的にアクティベーションに表示されることがわかります。しかし、それが起こらなくても、トレーニングはまだ機能しません。その損失や精度に改善はありません。 私は自分のコードをチェックして再チェックしましたが、問題の根本が何であるかについて途方に暮れています。 各レイヤーのデルタを計算するバックプロパゲーショントレーニングは次のとおりです。 backward lf n (out,tar) das = do let δout = tr (derivate lf (tar, out)) -- dE/dy deltas = scanr (\(l, a') δ -> let w = weights l in (tr a') * (w <> δ)) δout (zip (tail $ toList n) das) return (deltas) …

22
πの値を取得する最も速い方法は何ですか?
個人的な課題として、πの値を取得する最速の方法を探しています。より具体的には、などの#define定数を使用しM_PIたり、数値をハードコーディングしたりする必要のない方法を使用しています。 以下のプログラムは、私が知るさまざまな方法をテストします。インラインアセンブリバージョンは理論的には最速のオプションですが、移植性はありません。他のバージョンと比較するためのベースラインとして含めました。私のテストでは、組み込みで、4 * atan(1)バージョンをGCC 4.2で最も高速にatan(1)しています。これは、を定数に自動フォールディングするためです。で-fno-builtin指定され、atan2(0, -1)バージョンが最速です。 主なテストプログラムはpitimes.c次のとおりです(): #include <math.h> #include <stdio.h> #include <time.h> #define ITERS 10000000 #define TESTWITH(x) { \ diff = 0.0; \ time1 = clock(); \ for (i = 0; i < ITERS; ++i) \ diff += (x) - M_PI; \ time2 = clock(); \ printf("%s\t=> %e, time …

30
Javaで区切られたアイテムの文字列を作成する最良の方法は何ですか?
最近、Javaアプリで作業しているときに、コンマで区切られた値のリストを組み立てて、事前に存在する要素の数を知らずに別のWebサービスに渡す必要がありました。頭のてっぺんから思いつくことができる最高のものは、次のようなものでした。 public String appendWithDelimiter( String original, String addition, String delimiter ) { if ( original.equals( "" ) ) { return addition; } else { return original + delimiter + addition; } } String parameterString = ""; if ( condition ) parameterString = appendWithDelimiter( parameterString, "elementName", "," ); if ( anotherCondition …
317 java  string  algorithm 


3
Redisで使用される基本的なデータ構造は何ですか?
私は決定的なリストで2つの質問に答えようとしています: Redisで使用される基本的なデータ構造は何ですか? そして、各タイプの主な長所/短所/ユースケースは何ですか? したがって、Redisリストは実際にはリンクリストで実装されていることを読みました。しかし、他のタイプの場合は、情報を掘り下げることができません。また、誰かがこの質問に出くわして、さまざまなデータ構造を変更またはアクセスすることの長所と短所の高レベルの概要を持っていない場合、参照するために特定のタイプを最適に使用するタイミングの完全なリストも持っています。 具体的には、文字列、リスト、セット、zset、ハッシュなど、すべてのタイプの概要を説明します。 ああ、私はこれらの記事、とりわけこれまでの記事を見てきました。 http://redis.io/topics/data-types http://redis.io/topics/data-types-intro http://redis.io/topics/faq

30
2次元配列をどのように回転させますか?
Raymond Chenの投稿に触発されて、4x4の2次元配列があるとしたら、90度回転する関数を記述します。レイモンドは疑似コードのソリューションにリンクしていますが、実際の世界のものを見たいです。 [1][2][3][4] [5][6][7][8] [9][0][1][2] [3][4][5][6] になる: [3][9][5][1] [4][0][6][2] [5][1][7][3] [6][2][8][4] 更新:ニックの答えは最も簡単ですが、n ^ 2よりも優れた方法はありますか?マトリックスが10000x10000の場合はどうなりますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.