コンピュータサイエンス

コンピュータサイエンスの学生、研究者、実務家のためのQ&A

7
2つの配列が異なる1つの要素。効率的に見つける方法は?
私はコーディング面接の準備をしていますが、この問題を解決する最も効率的な方法を実際に見つけることはできません。 ソートされていない数値で構成される2つの配列があるとします。配列2には、配列1にはない数値が含まれています。両方の配列はランダムに配置された番号を持ち、必ずしも同じ順序または同じインデックスではありません。例えば: 配列1 [78,11、143、84、77、1、26、35 .... n] 配列2 [11,84、35、25、77、78、26、143 ... 21 ... n + 1] 異なる数を見つけるための最速のアルゴリズムは何ですか?その実行時間は何ですか?この例では、探している数字は21です。 私のアイデアは、配列1を実行し、配列2からその値を削除することでした。完了するまで繰り返します。これは、実行時間に近いはずです。O (n ログn )O(nlog⁡n)O(n \log n)

4
5つの要素をソート(順序)するために必要な比較の最小数
5つの要素を並べ替える(順序付ける)ために必要な比較の最小数を見つけ、この比較数を使用してこれらの要素を並べ替えるアルゴリズムを考案します。 解決策: 5つあります!= 120の可能な結果。したがって、ソート手順のバイナリツリーには少なくとも7つのレベルがあります。実際、 ≥120が示す時間 ≥7でも7の比較は十分ではありません。5つの要素を並べ替える(並べ替える)ために必要な比較の最小数は8です。2h2h2^hhhh 私の実際の質問は次のとおりです。8つの比較でそれを行うアルゴリズムを見つけましたが、7つの比較でそれができないことをどのように証明できますか?

5
素数を使用したデータ圧縮
私は最近、データのタイプや形式に関係なく、ランダムデータセットを常に50%以上効率的に圧縮すると主張する次の興味深い記事に出会いました。 基本的に、素数を使用して4バイトのデータチャンクの表現を一意に構築します。これは、すべての数が素数の一意の積であるため、簡単に解凍できます。これらのシーケンスを素数に関連付けるために、辞書を使用します。 私の質問は: 著者が示唆しているように、これは本当に実現可能ですか?論文によると、その結果は非常に効率的で、常にデータをより小さなサイズに圧縮します。辞書のサイズは膨大ではないでしょうか? これを使用して、同じアルゴリズムを使用して圧縮データを繰り返し再圧縮することはできませんか?このような技術(圧縮データをできるだけ多く再圧縮し、ファイルサイズを劇的に削減する)は不可能であることは明らかであり、実証されています。実際、すべてのランダムデータのセットと圧縮データの間に全単射はありません。なぜこれが可能だと感じるのでしょうか? 技術がまだ完全ではない場合でも、明らかに最適化および強力な改善が可能です。なぜこれは広く知られていません/研究されていないのですか?確かにこれらの主張と実験結果が真実であれば、これはコンピューティングに革命をもたらすことができなかったでしょうか?

1
推論を決定できる最も強力な既知の型システムは何ですか?
Hindley-Milner型推論(多型を持つ単純に型付けされた -calculus)には決定可能な型推論があることはよく知られています:注釈なしでプログラムの基本型を再構築できます。λλ\lambda Haskellスタイルのタイプクラスを追加すると、この決定可能性が保持されるように見えますが、さらに追加すると、注釈のない推論が決定不能になります(タイプファミリー、GADT、依存タイプ、ランクNタイプ、システムなど)ωω\omega 私は疑問に思っています:完全に決定可能な推論を持つ最も強力な既知の型システムは何ですか?Hindley-Milner(完全に決定可能)と依存型(完全に決定不能)の間のどこかにあります。推論の決定可能性を保持する追加可能なDTの側面はありますか?これをどれだけプッシュできるかを調べるために、どのような研究が行われましたか? 単一の最強システムは存在せず、推論を維持しながらHMに追加できる無限の小さな増分的な変更が存在する可能性が高いことを認識しています。しかし、システムの実用的な候補がいくつか発見されている可能性があります。 編集:「最強の」システムがないことを考えると、決定可能な推論でHindley Milnerを拡張する注目すべきシステムの概要を示す回答を受け入れます。例としては、液体タイプ、ランク2などがあります。

3
グラフの最小スパニングツリーが一意ではない場合
重み付きの無向グラフGが与えられた場合:Gに複数の最小全域木が存在するために、どの条件が当てはまらなければならないか すべての重みが異なる場合、MSTは一意であることを知っていますが、このステートメントを逆にすることはできません。グラフに同じウェイトの複数のエッジがある場合、複数のMSTが存在する可能性がありますが、1つだけ存在する場合もあります。 この例では、左側のグラフには一意のMSTがありますが、右側のグラフにはありません。 MSTの非一意性の条件を見つけるのに最も近い方法は次のとおりです。 グラフGのすべてのコードレスサイクル(他のサイクルを含まないサイクル)を検討します。これらのサイクルのいずれかに最大重み付きエッジが複数回存在する場合、グラフには一意の最小スパニングツリーがありません。 私の考えは、このようなサイクルのために n個の頂点がある場合、エッジの1つだけを除外し、すべての頂点を接続することができます。したがって、MSTを取得するために最も高い重みを持つエッジを削除するには複数の選択肢があるため、MSTは一意ではありません。 しかし、次にこの例を思いつきました。 このグラフには、私の条件に合ったサイクルがあることがわかります:(E、F、G、H)しかし、私が見る限り、最小スパニングツリーは一意です: したがって、私の状態は正しくないようです(または、完全に正しくない可能性があります)。最小スパニングツリーの非一意性に必要かつ十分な条件を見つけるための助けに感謝します。

4
すべての特定の望ましいプロパティを持つソートアルゴリズムはありませんか?
上のソートアルゴリズムのウェブサイトは、以下の請求が行われます。 理想的なソートアルゴリズムには、次のプロパティがあります。 安定:等しいキーは並べ替えられません。 所定の位置で動作し、追加スペースが必要です。O(1)O(1)O(1) 最悪の場合のキーの比較。O(n⋅lg(n))O(n⋅lg⁡(n))O(n\cdot\lg(n)) 最悪のスワップ。O(n)O(n)O(n) アダプティブ:データがほぼソートされている場合、または一意のキーがほとんどない場合、まで高速化されます。O(n)O(n)O(n) これらのプロパティをすべて備えたアルゴリズムはないため、ソートアルゴリズムの選択はアプリケーションによって異なります。 私の質問は、それは本当ですか これらのすべてのプロパティを持つ[ソート]アルゴリズムはありません もしそうなら、なぜですか?これらすべてが同時に満たすことを不可能にするこれらの特性についてはどうですか?

2
計算式はモナドと同じですか?
この質問は、Computer Science Stack Exchangeで回答できるため、Stack Overflowから移行されました。 5年前に移行され ました。 私はまだ関数型プログラミング(f#を使用)を学んでおり、最近計算式について読み始めました。私はまだ概念を完全には理解していません。モナドに関するすべての記事を読んでいるときに確信が持てない1つのこと(それらのほとんどはHaskellに基づいて書かれています)は計算式とモナドの関係です。 すべてを書いたので、ここに私の質問です(実際には2つの質問)。 すべてのF#計算式はモナドですか?すべてのモナドをF#計算式で表現できますか? この Tomas Petricekの投稿を読んだことがあり、よく理解できれば、計算式はモナド以上のものであると述べていますが、これを正しく解釈できるかどうかはわかりません。

3
NP完全問題は、なぜ近似の点でそれほど異なるのですか?
私はプログラマーだと言って質問を始めたいのですが、複雑性理論の背景はあまり持っていません。 私が気づいたことの1つは、多くの問題はNP完全ですが、最適化問題に拡張すると、いくつかは他のものよりも近似するのがはるかに難しいことです。 良い例がTSPです。すべての種類のTSPはNP完全ですが、対応する最適化の問題は、次の単純化でより簡単に近似できます。一般的なケースはNPO完全、メトリックのケースはAPX完全、ユークリッドのケースには実際にPTASがあります。 これは私には直観に反しているように思われ、これには理由があるかどうか疑問に思っています。

3
体積を与えて表面積を最小化するアルゴリズム
次のアルゴリズムタスクを検討してください。 入力:正の整数nnnとその素因数分解 Find:制限に従って、を最小化する正の整数x y + y z + x z x y z = nx,y,zx,y,zx,y,zxy+yz+xzxy+yz+xzxy+yz+xzxyz=nxyz=nxyz=n この問題の複雑さは何ですか?多項式時間アルゴリズムはありますか?NPハードですか? この問題は基本的に、体積がで寸法がすべて整数であるすべての直方体のうち、表面積が最小のものを求めます。nnn この問題は、Dan Meyerによって、「1,000人の数学教師が解決できない数学問題」というタイトルで提起されました。これまでのところ、彼が働いていた数学教師の誰も、この問題に対する合理的なアルゴリズムを見つけていません。彼の文脈では、「合理的」の定義は少し不正確ですが、コンピューター科学者として、この問題の複雑さについてより正確な質問をすることができます。 明らかなアプローチは、すべての可能性を列挙することですが、これには指数関数的な時間がかかります。Dan Meyerのブログのコメンターは、残念ながらすべてが間違っていることが判明した多くの効率的な候補アルゴリズムを提案しています。マーティン・ストラウスは、この問題が3パーティションを漠然と連想させるように思われると示唆していますが、それを減らすことはできません。x,y,zx,y,zx,y,z また、コメント/回答で私が見たいくつかの誤解を解消させてください。 2つの問題の目的関数が異なるため、各数値をそのべき乗に置き換えるだけでは、3分割から減らすことはできません。明らかな削減は単に機能しません。2 qqqq2q2q2^q 最適解のいずれピッキング含むことは真実ではない最も近い除数であるとに。私はこれが事実であると仮定している複数の人々を見ますが、実際、それは正しくありません。これは、Dan Meyerのブログ投稿で既に反証されています。たとえば、n = 68を検討します。\ sqrt [3] {68} \ approx 4、および4は68を除算するため、x、y、zの少なくとも1つは4であると考えるかもしれません。ただし、それは正しくありません。最適なソリューションはx = 2、y = 2、z = 17です。別の反例はn = 222、\ sqrt [3] {222} \ approx 6ですが、最適なソリューションはnは3 √x,y,zx,y,zx,y,znnn N=683 …

3
(数学)問題をSATインスタンスに変換する
私がやりたいのは、数学の問題をブール充足可能性問題(SAT)に変え、SATソルバーを使用してそれを解くことです。誰かが私の問題をSATインスタンスに変換するのに役立つマニュアル、ガイド、または何かを知っているのだろうか。 また、指数関数的な時間よりも良い方法でこれを解決したいです。SAT Solverが役立つことを願っています。

2
分割統治の理論的基礎
アルゴリズムの設計に関しては、多くの場合、次の手法を使用します。 動的プログラミング 貪欲戦略 分割統治 最初の2つの方法については、よく知られた理論的基礎、つまりベルマン最適性原理とマトロイド(またはグレドイド)理論がありますが、D&Cに基づくアルゴリズムのこのような一般的なフレームワークは見つかりませんでした。 まず、コンビネータのコンテキストで発生した「アルゴリズムスケルトン」と呼ばれる関数型プログラミングクラスで私たち(またはむしろ教授)が導入したことを認識しています。この例として、D&Cアルゴリズムのスケルトンを次のように指定しました。 定義:A,SA,SA,S空でないセットとします。SSS ソリューションの要素と呼び、の要素:= P(A )P:=P(A)P:=P(A)P:=\mathfrak{P}(A)(つまり、のサブセットAAA)は問題と呼ばれます。次いで、D&C-骨格は 4タプルである(Pβ,β,D,C)(Pβ,β,D,C)(P_\beta, \beta, \mathcal{D}, \mathcal{C})ここで、: PβPβP_\beta問題の集合以上の述語であり、我々は問題のことを言うpppされ、基本的なIFFPβ(p)Pβ(p)P_\beta(p)成り立ちます。 、Aマッピングである P β → Sの各基本的な問題に対する解決策を割り当てます。ββ\betaPβ→SPβ→SP_\beta \rightarrow S は、各問題を一連の副問題に分割するマッピング P → P(P )です。DD\mathcal{D}P→P(P)P→P(P)P \rightarrow \mathfrak{P}(P) は P × P(S )→ Sのマッピングであり、サブ問題の解(「ピボット問題」の種類に応じて)を結合して解を生成します。CC\mathcal{C}P×P(S)→SP×P(S)→SP\times \mathfrak{P}(S) \rightarrow S 次いで、に対して与えられたスケルトンおよび問題Pは、次の汎用関数F S:P → Sは、のために(形式的な意味での)解を計算P。s=(Pβ,β,D,C)s=(Pβ,β,D,C)s=(P_\beta, \beta, \mathcal{D}, \mathcal{C})pppfs:P→ Sfs:P→Sf_s: P\rightarrow Sppp fs(p )= …

4
0-1行列ベクトル乗算の自動最適化
質問: 行列が密で、ゼロと1だけで満たされている場合、行列ベクトル乗算を効率的に適用するコードを生成するための手順または理論は確立されていますか?理想的には、最適化されたコードは、以前に計算された情報を体系的に使用して、重複する作業を減らします。 つまり、行列 あり、に基づいて事前計算を行い、後でベクトル受け取ったときにを可能な限り効率的に計算します。MMMMMMMvMvMvvvv MMMは「コンパイル時」に知られている長方形の密なバイナリマトリックスであり、は「実行時」にのみ知られている未知の実数ベクトルです。vvv 例1:(スライディングウィンドウ) 簡単な小さな例を使用して、私のポイントを説明します。、行列を考える この行列をベクトルに適用してを取得するとします。結果のエントリは、 M= ⎡⎣⎢⎢⎢11111111111111111111⎤⎦⎥⎥⎥。M=[11111111111111111111].M = \begin{bmatrix}1 & 1 & 1 & 1 & 1\\ & 1 & 1 & 1 & 1 & 1 \\ & & 1 & 1 & 1 & 1 & 1\\ & & & 1 & 1 & 1 …

5
関数型言語のチューリングが完全なのはなぜですか?
主題に関する私の限られた理解はおそらく間違っていますが、これは私がこれまでのところ理解していることです: 関数型プログラミングは、Alonzo Churchが策定したLambda Calculusに基づいています。 命令型プログラミングは、教会の学生であるアランチューリングによって作成されたチューリングマシンモデルに基づいています。 ラムダ計算は、チューリングマシンと同じくらい強力で 能力があります。つまり、計算能力は同等です。 関数型プログラミングがチューリングマシンではなくLambda Calculusに基づいている場合、なぜそれらの一部(またはすべて)がチューリング完全であると記述され、ラムダ完全などではないのですか?「チューリング完全性」という用語は、チューリングマシンにとって特別な意味がありますか、それとも単なる言葉ですか。 最後に、命令型言語がチューリングマシンに基づいており、コンピューターが基本的に無限メモリのないチューリングマシンである場合、現代のPCで機能するプログラミング言語よりもパフォーマンスが高いことを意味しますか? その場合、ラムダ計算機と同等のものは何でしょうか? これは3つの別個の質問のように見えますが、それらはすべて密接に関連しており、それぞれが最初の有効な質問である前の質問に依存しています。

2
カテゴリー理論が意味することは、高階関数をどのように扱うかをまだ知りませんか?
読んでウダイ・レディの 答えをするSMLでファンクタとカテゴリの理論との関係とは?Uday州 カテゴリー理論は、高階関数の扱い方をまだ知らない。いつか、そうなるでしょう。 カテゴリー理論は数学の基礎として役立つと思ったので、数学と高階関数のすべてを導き出すことができるはずです。 それでは、カテゴリ理論が意味することは、高階関数の扱い方をまだ知らないということですか?カテゴリー理論を数学の基礎として考えることは有効ですか?

3
コルモゴロフの複雑さの近似
コルモゴロフの複雑さについて何かを研究し、VitanyiとLiのいくつかの記事と本を読んで、正規化圧縮距離の概念を使用して著者のスティロメトリーを検証しました(各著者がどのようにテキストとグループ文書を書くかを類似性によって識別します)。 その場合、データコンプレッサーをチューリングマシンとして使用できるため、データコンプレッサーを使用してコルモゴロフの複雑さを近似しました。 データ圧縮とプログラミング言語(ある種のコンプレッサーを記述する)に加えて、コルモゴロフの複雑さを近似するために他に使用できるものはありますか?使用できる他のアプローチはありますか?

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