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

数学とコンピュータサイエンスでは、アルゴリズムは、関数を計算するための明確に定義された命令の有限リストとして表現される効果的な方法です。アルゴリズムは、計算、データ処理、および自動推論に使用されます。

1
3の最大多重度で原点から外側にエッジと頂点を生成するアルゴリズム
私は、宇宙が非常に大きくなる(基本的には無限に大きくなる)Webサイト用の2Dゲームを作成しています。最初は、宇宙は原点(0、0)から等しい距離にある6つの星で構成されています。私のタスクは、相互に接続する「パス」(エッジ)を持つより多くの星を生成できるようにすることです。これらの制限を満たすアルゴリズムをどのように設計できますか: 星は外側にランダムに生成されます。(たとえば、新しい星の(x、y)座標は、(0、0)からすべての方向にゆっくりと外側に移動し、できれば螺旋状になります) エッジは交差しません。 多少の違いはあるはずですが、新しい星は他の星に近すぎたり近すぎたりしてはなりません。(たとえば、最小半径が必要です) スター/ポイントの多重度が3を超えることはできません。 このすべてがデータベースに保存されることを考えると、アルゴリズムのコストが高すぎることはありません。言い換えれば、O(n)の複雑さを実現したいと考えています(これが実現可能かどうかはわかりません)。 基本的に、私が目指しているのは、星がグラフ上の点であり、星間の移動がそれらの星の間のエッジで描かれている渦巻き状の銀河です。 解決する必要がある特定の手順は次のとおりです。 まだ3の多重度を持たない他の星の近隣に点をランダムに生成します。 エッジの競合を生成しない3の多重度をまだ持たない最初の星を見つけます。 星がx単位の最小距離にある場合、2点間にエッジを作成します。 解決策を探してみましたが、数学のスキル(およびグラフ理論の知識)には多くの作業が必要です。また、この問題に関するリソース/リンクは大歓迎です。 ここに私が考えていたいくつかの擬似コードがありますが、これがうまくいくかどうかはわかりません。 newStar = randomly generated (x, y) within radius of last star from origin while(newStar has not been connected): for (star in the known universe): if(distance between newStar and star > x units): if(star has < 3 multiplicity): …

5
3つの数値を比較する簡単でわかりやすい方法
if動作するsのシーケンスを含むコードをいくつか持っていますが、面倒です。基本的に、3つの整数のうち最大のものを選択し、選択されたことを示すステータスフラグを設定します。私の現在のコードは次のようになります。 a = countAs(); b = countBs(); c = countCs(); if (a > b && a > c) status = MOSTLY_A; else if (b > a && b > c) status = MOSTLY_B; else if (c > a && c > b) status = MOSTLY_C; else status = DONT_KNOW; このパターンは数回発生し、長い変数名では、それぞれifが正しいことを視覚的に確認するのが少し難しくなります。これを行うためのより良い、より明確な方法があるかもしれないと感じています。誰でも何か提案できますか? …
11 algorithms  c 

1
k組み合わせの高速インデックス作成
少し前に取り組んでいた古い問題を再検討しています。 典型的なシナリオは、「8ビット整数内に3ビットが設定されている」、つまり00000111です。 ネストされたループによって、3セットのビットを持つすべての一意の組み合わせを(順番に)簡単に生成できます。私が興味を持っているのは、マッピングインデックス<->の組み合わせです。つまり、「00001011」が2番目の組み合わせ(またはゼロベースのインデックスでは値「1」)になります。 これまでのところ、すべての組み合わせを実行してテーブルに格納し、ルックアップインデックス->会話をO(1)操作にしました。もう一方の方向はO(ln(n))で、二分探索です。 ただし、欠点は、ドメインを増やすと、これが実行可能でないポイントまで、明らかにメモリに負荷がかかることです。 n番目の組み合わせまたは特定の組み合わせのインデックスを計算する簡単な方法は何ですか?組み合わせの順序はいいでしょうが、必須ではありません。

2
個別の連鎖にバイナリ検索ツリーを使用してハッシュテーブルを高速化することは可能ですか?
バイナリ検索ツリーを使用してハッシュテーブルを実装し、O(n)(リンクリストを使用)からO(log n)(BSTを使用)への個別チェーンプロセスの検索の複雑さを軽減します。これを行うことはできますか?ソリューションが段階的なロジックの実装であれば、理解しやすくなります。 ハッシュテーブル(個別のチェーンを使用してビルド)の検索時間を短縮したいのですが、同時に挿入時間を増やしたくありません。私のプロジェクトでは、ハッシュ関数を変更して衝突を減らすことはできません。しかし、スケーラビリティのために、衝突が発生しています。私は回避策を見つけようとしていますので、衝突が発生した場合に何らかの方法で最高のアクセスと時間を挿入できるようにしています...つまり、アルゴリズム全体を再構築するよりも物の現在の状態を管理します。パンアウトしない場合は、再構築する必要があります。アイデアはありますか?

3
開始文字と終了文字が一致する単語の最長リスト
私の友人は、彼が簡単だと言っている問題を私に与えましたが、私はそれをするのに使う良いアルゴリズムを見つけられません。 100個のランダムな英語の単語が入力されます。ある単語の最後の文字が次の単語の最初の文字と一致する単語の最も長い文字列を見つける必要があります。各単語は1回しか使用できません。 たとえば、「cat」、「dog」、「that」という単語を指定した場合、作成できる最長の文字列は「cat-> that」になります。「マウス」、「ムース」、「ユニコーン」という単語が与えられた場合、作成できる最長の文字列は1つの単語になります(これらの単語はリンクしていないため)。「鳥」、「皿」、「港」という単語が与えられた場合、作成できる最長の文字列は「港->鳥->皿」(または「皿->港->鳥」または「鳥- >皿->ハーブ」)。 これを有向巡回グラフとしてモデル化するというアイデアを思いつきました。各ノードは単なる単語であり、頂点はこの単語が終わる文字で始まる各単語/ノードに移動します。 +-------+ \ +------+ | cat |-----------| that | +-------+ / +------+ | | \|/ | +-------+ / | | the |--------------+ +-------+ \ この問題は、NP-Hardである最長パス検索のようです。 それを行うより良い方法はありますか?または、使用できる近似アルゴリズムのようなものもありますか?または、検索スペースを削減するために英語の資質を活用する方法はありますか?
11 algorithms 

2
Facebookの広告入札システムの仕組み
Facebookで広告を作成すると、「推奨入札価格」の範囲が提供されます(例:$ 0.90-$ 2.15 USD)。このページによると: 推奨入札単価の範囲は、広告が成功するように上限入札単価を選択するのに役立ちます。これは、あなたと同じオーディエンスに広告を表示するために競合している他の広告主の数に基づいています。 ここで実際に(技術的に)何が起こっているのかを理解することに興味があります。 ユーザーがFacebookにログインするとします。サーバー側では、ユーザーのブラウザーが(ログインの一部として)送信したHTTPリクエストが処理され、サーバーはユーザーに表示する広告を判断する必要があります。 私が想定し、「入札」システムの出番これは?このユーザーの人口統計と、競合する複数の広告主がキャンペーンを設計したオーディエンスターゲティングに基づいて、Facebookが返す可能性のある20の異なる広告のプールを見ているとしましょう。 この入札システムは、Facebookがクライアント側に返す20の広告のどれを決定するのに役立ちますか?「入札単価を引き上げる」広告主は、「入札単価を下げる」広告主よりも優先されると思います。しかし、この入札はいつ行われますか?広告主はどのくらいの頻度で再入札する必要がありますか?入札バインディングの期間は? 広告の背後にあるこれらの使用関連の概念を理解すれば、次の「選択戦略」のどちらがバックエンドで使用されているかが明らかになるでしょう。 ラウンドロビン 優先ラウンドロビン ランダム化(疑わしい) 履歴ベース MVPベース 私を正しい方向に導き、これらの提案された入札システムが何であり、どのように機能するかを説明できる人に感謝します。

5
アルゴリズムのランダウ表記(Big OまたはTheta表記)をプログラムで見つけるには?
私は、アルゴリズムを可能な限り最適化するために、手作業でアルゴリズムのLandau(Big O、Theta ...)表記を検索するのに慣れていますが、関数が本当に大きく複雑になっているとき、それはうまくいきません手でやるには時間がかかりすぎます。また、ヒューマンエラーが発生しやすくなります。 私はCodi​​lity(コーディング/アルゴリズム演習)に時間を費やし、提出されたソリューションのLandau表記(TimeとMemoryの両方の使用量)が表示されることに気付きました。 私は彼らがそれをどのように行うのだろうと思っていました...どのようにあなたはそれをしますか? 字句解析またはコードの解析以外の方法はありますか? この質問は主にPHPやJavaScriptに関係していますが、私はどんな言語や理論にも心を開いています。

4
本番ソフトウェアでは、一般的な場合の指数時間アルゴリズムはどのくらい一般的ですか?
指数時間アルゴリズムは一般的に避けるべきですが、時には必要になることも知っています。巡回セールスマンであるケース。本番ソフトウェアでこのようなアルゴリズムはどれくらい一般的ですか?これらのケースは一般的に必要ですか、それとも急ぎの仕事の結果ですか?私は、多くが良い発見的方法で解決できることを理解しています。できない人は通常何をしますか?
11 algorithms 

5
24時間降水量のリストを1時間ごとの合計値に変換する
時間ごとの降水量のリストがあり、それぞれが過去24時間に発生した雨の量を日付順に並べたものだとします。例えば: { '2012-05-24 12:00': 0.5, // .5" of rain from 5/23 12:00 - 5/24 11:59 '2012-05-24 11:00': 0.6, // .6" of rain from 5/23 11:00 - 5/24 10:59 '2012-05-24 10:00': 0.6, // .6" of rain from 5/23 10:00 - 5/24 09:59 ... '2012-05-23 10:00': 0 } 各時間に降った雨の量を判断するための戦略/アルゴリズムはありますか?これに頭を包むことはできないようです。私はそれが単に差分を合計するほど簡単ではないことを知っています。 データセットの視覚化 P(N) [.....======================] …

6
文字列を1つずつ連結するのは非効率ですか?
Cでのプログラミングの日々を思い出します。2つの文字列が結合されると、OSは結合された文字列にメモリを割り当てる必要があります。解放されます。したがって、リストに参加する場合のようにこれが複数回行われると、OSは次の連結後に解放されるために、より多くのメモリを常に割り当てる必要があります。Cでこれを行うより良い方法は、結合された文字列の合計サイズを決定し、結合された文字列のリスト全体に必要なメモリを割り当てることです。 現在、最新のプログラミング言語(C#など)では、コレクションを反復処理し、すべての文字列を一度に1つの文字列参照に追加することで、コレクションの内容が結合されるのがよく見られます。これは、最新のコンピューティング能力を備えていても非効率ではありませんか?

7
アルゴリズムが正しい場合、それを書くのにどれくらい時間がかかったかは重要ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私は最近、Facebookがプログラミングの課題を抱えていることを発見しました。 ハノイの塔タイプの問題を解決できるアルゴリズムを作成するように求めるサンプルチャレンジがあります。多数のペグとディスク、初期構成と最終構成が与えられます。アルゴリズムは、最終構成に到達してステップを出力するために、可能な限り少ないステップを決定する必要があります。 このサンプルチャレンジでは、45分の制限時間が与えられますが、制限時間を過ぎてもコードがテストされるかどうかを確認できます。 私はそれを解決できるかわいい数学の解法を知​​りませんでした。それで、私は自分でできる限り最善の課題を解決しようとしました。 うまく機能し、合格したアルゴリズムを作成することができました。ただし、作成に4時間以上かかり、45分という要件よりもはるかに長くかかりました。割り当てられた時間よりもずっと長くかかったので、実際の挑戦を試みたことはありません。 しかし、これは私を不思議に思わせました。実際には、それが私をそれほど長くかかったことは本当に重要ですか?これは、このような場所(Facebookだけでなく、Google、Fog Creekなど)で仕事に就くことができず、抱負を下げる必要がある、または実際に合格したという事実を示すサインです私の最初の試みでは、時間がかかりすぎたとしても、良いと見なされますか?
11 algorithms 

6
皮肉を検出するスクリプトを教える方法は?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 私は現在、基本的に指定されたフレーズと一致し、一致ポイントに基づいて事前定義された応答を提供する楽しいスクリプトを作成しています。ライブフィードに基づいて情報を取得したり、タスクを実行したり、逸話を伝えたり、彼女とチャットしたりできます。 既にbadwords、caps lock、またはその両方の検出機能が組み込まれています。プログラムには女の子の名前があり、私はロジック用語でできるだけ女の子らしい女の子になるようにしようとしました(たとえば、ほとんどの女の子が質問に答えるために700ミリ秒かかることは誰もが知っています、もちろん冗談です)。以下に小さな例を示します。 クライアント:あなたの問題は何ですか? キク:私と一緒に使ってはいけません! クライアント:####あなた Kiku:どうしてあなたは私にそんなに意地悪なのですか:/ しかし、私は本当に皮肉の機能を追加したいと思います。皮肉に何かを書くと、彼女はそれを検出し、それに応じて対応します。さて、これはトリッキーな部分です。スクリプトをどのように教えますか、皮肉は何ですか? より具体的に私に。今日使用されている最も一般的な皮肉な言葉は何ですか?または、その統計を取得する方法は?特定のフレーズのコンテキストをスクリプトに理解させるにはどうすればよいですか? 更新 この質問は多くの誇大広告になっているので、私は物事がもう少しクリアされるべきだと思います。スクリプトが皮肉を完全に検出することは基本的に不可能であることは非常に明白です。少なくとも合理的な問題では。ただし、ある程度の皮肉が検出される可能性があると思います。 現在のところ、スクリプトで非常に限定的な皮肉を検出できるようになっています。いくつかの一般的な皮肉な言葉を事前に定義しました(しかし、それだけでは役に立ちません)。そして、大文字と引用符で囲まれた:THANKS you are so smartやのような単純なものに最初に一致しますoh you are so "SMART"。 スクリプトの主な機能はタスクを実行するか、情報を取得することであり、あとがきはそれが意図したものかどうかを尋ねます。それから私は、「感謝」を特別な変数として追加することを考えました。だから、yeah thanksまたはwhatever thanks可能な皮肉をトリガすると、スクリプトがあなたに尋ねます:「?私は皮肉を検出ください」あなたの最善の策は、「申し訳ありません」と言うことです。そうしないと、警告ポイントが追加され、制限に達すると、無視され始めます。 これらの非常に単純なアルゴリズムは実際に機能するように見えるため、このアイデアには、もちろん多くのチューニングと微調整の後、未来があります。ただし、同じアイデアを念頭に置いてオープンソースソフトウェアを作成する方が賢い人がいるかもしれません。次に、この機能をWeb上の多くの機能にフックできます。カスタマーケアはおそらく最も恩恵を受けるでしょうが、この種のソフトウェアは「フラグ可能」コンテンツの検出にも使用できます。

2
ユーザーテキスト入力に基づいてリストから最も可能性の高いオプションを選択する方法
ユーザーのテキスト入力に基づいてオプションを選択する必要があるOCRアプリケーションで作業しています。 Ex: Available Options: ["python", "ruby", "java", "clojure", "haskell"] Input: kava Output: java Input: ruby Output: ruby Input: clujuro Output: clojure etc.. 私のアプリケーションはPythonベースですが、この問題を解決するためのアルゴリズムがすでに存在しますか?

3
エレベーターのアルゴリズムと実装[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 (実際の)エレベーターの仕組みを知りたかった。しかし、これまでのところ、私は彼らが使用するアルゴリズムに関する多くの資料も、シミュレーション用のソフトウェア(もしあれば)を見つけることができませんでした。誰かが私にその参考文献を教えてもらえますか?

2
REST APIの認証の設計
私は、RESTサービス用のAPIを作成しています。これは、作成と消費の両方を行います。私は過去数日間、認証をうまく処理する方法を見つけようとして過ごし、最終的に何かを思いついたと思います。 アプリケーションスタックに関する次の事実に基づいて、これを考えています。 クライアントとサーバーは.NET4にあります(クライアントプロファイルのクライアント部分) サーバーはWCF RESTを使用して公開します アプリのユーザー名とパスワードをメモリに保持したくない 3から、トークン認証の形式を使用したかったため、サーバーによって資格情報が検証された後、クライアントはアプリの残りの部分で使用するトークンを取得します(これにより、ユーザーのタイムアウト、Webバージョンとデスクトップバージョン間でのシームレスなユーザーの移動など)。通話をリプレイし、改ざん防止する方法を考えた後、次のことを思いつきました。 クライアントは認証を試みる前に、ECDiffieHellmanCngクラスを使用してDiffie-Hellmanキーペアを生成します。 鍵ペアの公開部分をユーザー名とパスワードとともに有線で送信します(もちろんHTTPS経由)。 サーバーはユーザー名とパスワードの組み合わせを認証し、成功した場合、次のことを行います。 一意のセッショントークンを作成します 独自のDHキーペアを生成し、クライアントから提供された公開キーから共有シークレットを計算します データベース内のセッショントークン、共有シークレット、ユーザー、および「最終アクション」時間(ローリング有効期限ウィンドウに使用)をメモします。 セッショントークン、その公開DHキー、および認証成功メッセージを返します クライアントは、応答からDHキーを取得し、共有シークレットを計算し、トークンとシークレットの両方をメモリに保存します。 この時点から、セッショントークン/シークレットの組み合わせは、他のほとんどのREST APIと同様に機能し、要求のフィンガープリントとタイムスタンプが付けられ、何らかのHMACが生成されます。クライアントがサーバーに対してアクションを実行するたびに、トークン/シークレットペアをチェックし、有効で期限切れでない場合はアクションを許可し、セッションの最後のアクションレコードを更新します。 明らかな欠陥は見当たらず、おそらくこのために過剰に設計されていますが、ある時点でこれを行う方法を学ぶ必要があります。HMACはリプレイ攻撃を防ぎ、DHネゴシエーションはMITM攻撃を防ぐのに役立ちます(HMAC / DHの間で頭の上の実行可能な攻撃を考えることはできません)。 誰でもこれを突くことができる穴はありますか?

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