コンピュータサイエンス

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

6
単純なバイナリデータの効率的な圧縮
から2 n − 1の順序付けられた2進数を含むファイルがあります。0002n− 12n−12^n - 1 0000000000 0000000001 0000000010 0000000011 0000000100 ... 1111111111 7zはこのファイルを非常に効率的に圧縮しませんでした(n = 20の場合、22 MBは300 kBに圧縮されました)。 データの非常に単純な構造を認識し、ファイルを数バイトに圧縮できるアルゴリズムはありますか?また、CSや情報理論のどの分野がこのようなスマートアルゴリズムを研究しているかを知りたいです。「AI」は広すぎるため、より具体的なキーワードを提案してください。 対称性の概念はデータ圧縮で基本的な役割を果たすはずですが、検索クエリ「データ圧縮の対称性」と「データ圧縮の群論」は、驚くべきことにほとんど何も関連性を返しません。

3
NPで「明らかに」ではないNP完全問題
私が読んだすべての完全性証明(覚えている)で、問題がにあることを示し、それがであることを示すことは常に些細なことです。 -ハードは...ハードな部分です。何 -completeの問題は、その多項式時間検証非常に非自明であるこれらは何ですか?NP\textbf{NP}NP\textbf{NP}NP\textbf{NP}NP\textbf{NP}

2
タイムスロットのブロックを売る
与えられたのタイムスロットがあることk個の人々が購入したいです。人が私は値有するH (I 、J )≥ 0を各タイムスロットのためにJ。各ユーザーは、空の可能性があるタイムスロットの連続したブロックを1つしか購入できません。nnnkkk私iiH (I 、J )≥ 0h(i,j)≥0h(i,j)\geq 0jjj 売り手が達成できる最大値を計算する多項式時間アルゴリズムはありますか? 連続性の制約がなければ、各タイムスロットを最も価値のある人に与えることができます。我々はのタイムスロットの順序固定場合にも、人々を、次いで、動的プログラミングは、最初の最大値を求めるために使用することができる0 ≤ I ≤ Kの最初の購入人0 ≤ J ≤ N個のタイムスロット。kkk0 ≤ I ≤ K0≤i≤k0\le i \le k0 ≤ J ≤ n個0≤j≤n0\le j \le n

5
チューリングマシンと有限状態マシンの違いは?
チューリングマシンに関するプレゼンテーションを行っています。チューリングマシンを紹介する前に、FSMの背景を説明したかったのです。問題は、何が互いに非常に違うのか本当に分からないことです。 私が知っているのは違います: FSMは、対応する条件に応じて、チューリングマシンが読み取りと書き込みを行うヘッドを備えた無限の「テープ」で動作する状態に応じて連続した状態を持ちます。 FSMにはエラーが発生する余地があります。これは、終了しない状態に簡単に陥ることができるのに対して、チューリングマシンには戻って物事を変更できるのでそれほど問題ではないからです。 しかし、それ以外には、チューリングマシンをFSMよりも優れたものにするほど多くの違いは知りません。 手伝ってくれませんか?

5
チューリングマシンの実用的な重要性
私は電気技術者であり、26年前に大学で1つのCSコースしかありませんでした。しかし、私は献身的なMathematicaユーザーでもあります。 私は、チューリングマシンがコンピューターサイエンスで非常に重要であると感じています。重要性はコンピューターサイエンスの理論だけですか?実用的な意味/アプリケーションがある場合、それらのいくつかは何ですか?

6
チューリングマシンに物理的な類似性はありますか?
最近、CSクラスでチューリングマシンを紹介しました。 授業の後、テープとマシンの関係を理解し​​ようと2時間以上費やしました。 今日まで、コンピューターテープの存在や、テープとマシンがどのように相互作用しているかについてはまったく知りませんでした。マシンがテープを読み取る理由はまだわかりませんが、スキャナーはおそらくチューリングマシンに近い概念であり、紙はテープと見なされ、スキャナーの内部に入るものはチューリングマシンが行うものです。 しかし、いずれにせよ、チューリングマシンのアイデアは非常に古風ではありませんか?オフィスやリビングルームには、チューリングマシンの機能を果たしていると思われる物理的(仮想的ではなく)デバイスが数多くあります。 この仮想的な概念の本質的な機能が捕捉されるように、誰かが現実からより良い例を描くことができますか?

9
プログラミング言語は自然言語に似てきていますか?
この質問は、Computer Science Stack Exchangeで回答できるため、Software Engineering Stack Exchangeから移行されました。 6年前に移行され ました。 言語学の文脈でプログラミング言語を勉強できますか?プログラミング言語は自然言語と同様の方法で自然に進化しますか? プログラミング言語には完全な合理性と数学的な一貫性が不可欠ですが、人間にとって読みやすく快適なものにする必要があります(特に現代の言語)。 プログラミング言語は進化し、より言語的になり、より自然になりましたか?たとえば、マシンコード、パンチカード、およびアセンブリ言語は、RubyやPythonなどのより読みやすい言語に取って代わりました。 コンピューター言語がより自然になっていると言うとき、「英語で持っている単語」がより多く含まれているわけではなく、文法の複雑さと意味を表現する能力の点で、自然言語のようになっているようです(たとえば、合理的かつ人間が理解できる方法でデータベースからのクエリを雄弁に説明できること)。 皆さんはどう思いますか?プログラミング言語は自然言語のようになり、言語学の法則に適用できるようになりましたか? あるいは、言語はスペクトル上に存在し、一方には極端に合理的な言語があり、他方には創造性があります。たぶん、プログラミング言語と自然言語は同一であり、両方ともこの言語の範囲内にあるだけです(その唯一の違いは、おそらく彼らが意味を与えようとしている「もの」であることです)。 人間の言語とコンピューター言語の分離(バベルタワー効果)の間に関係はありますか?同じ理由(すなわち、進化し続けるコンピューターシステム/文化システムなどのさまざまな問題を解決するため)で、それらはより多様になりますか?

4
グラフの直径を見つける時間の複雑さ
グラフの直径を見つける時間の複雑さは何 ですか?G=(V,E)G=(V,E)G=(V,E) O(|V|2)O(|V|2){O}(|V|^2) O(|V|2+|V|⋅|E|)O(|V|2+|V|⋅|E|){O}(|V|^2+|V| \cdot |E|) O(|V|2⋅|E|)O(|V|2⋅|E|){O}(|V|^2\cdot |E|) O(|V|⋅|E|2)O(|V|⋅|E|2){O}(|V|\cdot |E|^2) グラフの直径は、グラフ内のすべての頂点のペア間の最短パス距離のセットの最大値です。GGG 私はそれについて何をすべきか分かりません。このような問題を解決する方法について完全な分析が必要です。

2
手動でFFTを行う方法を示す
2つの多項式3+x3+x3 + xと2x2+22x2+22x^2 + 2ます。 FFTがこれら2つの多項式の乗算にどのように役立つかを理解しようとしています。ただし、解決された例は見つかりません。FFTアルゴリズムがこれら2つの多項式をどのように乗算するかを誰かが教えてくれますか。(注:これらの多項式には特別なものはありませんが、従いやすくするためにシンプルにしたかったのです。) 擬似コードでアルゴリズムを見てきましたが、それらのすべてに問題があるようです(入力の内容、未定義の変数を指定しないでください)。そして驚くべきことに、FFTを使用して多項式を乗算する例を、実際に誰が(手で)歩いたのか見つけることができません。

12
オーバーフィットが悪いのはなぜですか?
私はこの多くを研究しましたが、機械学習でのアクションの過剰適合は悪いと言いますが、ニューロンは非常に強くなり、私たちが通り抜けたり回避したりする最高のアクション/感覚を見つけ、さらに悪いからデクリメント/インクリメントすることができます/ goodまたはbadトリガーによって、アクションが平準化され、最高の(右)、非常に強い自信のあるアクションになります。これはどのように失敗しますか?これは、正と負のセンストリガーを使用して、44posからのアクションをデ/再インクリメントします。22negに。

4
モールス符号は、バイナリ、3進、または5進です​​か?
私は本を​​読んでいます:「コード:コンピュータのハードウェアとソフトウェアの隠された言語」と第2章で著者は言います: モールス符号は、コードのコンポーネントがドットとダッシュの2つだけで構成されているため、バイナリ(文字通り2つずつ)コードと呼ばれます。 一方、ウィキペディアはこう言います: 厳密には、5つの基本要素があるため、バイナリではありません(5進を参照)。ただし、これはモールス信号をバイナリコードとして表現できないことを意味するものではありません。抽象的には、これは電信オペレータがメッセージを送信するときに実行する機能です(5項参照)。 しかし、もう一度、ウィキペディアの別のページの「バイナリコードのリスト」にモールス信号が含まれています。 モールス符号は実際には三元系だと思うので、私は非常に混乱しています。沈黙、短いビープ音、長いビープ音の3種類の「可能性」があります。 モールス符号を「stirct binary」で表現することは不可能ではありませんか? 「厳密なバイナリ」とは、バイナリストリームを考えます。1010111101010..沈黙、短いビープ音、および/または長いビープ音をどのように表すのですか? 私が考えることができる唯一の方法は、コンピューターが実装する「ワードサイズ」です。私(およびCPU /コードのインタープリター)が毎回8ビットを読み取ることを知っている場合、モールス符号を表すことができます。単純に1の短いビープ音または0の長いビープ音を表すことができ、無音は暗黙的に単語の長さで表されます(たとえば、8ビット)。したがって、この3番目の変数/私の手:ワードサイズ。 私の考えは次のようになります。最初の3ビットを読み取るビット数に予約し、最後の5ビットを8ビットワードのモールス符号に予約できます。00110000などは「A」を意味します。そして、私はまだ「バイナリ」ですが、それを3進数にする単語サイズが必要ではありませんか?最初の3ビットは、次の5ビットから1ビットのみを読み取ります。 3進数を使用する場合、2進数の代わりに、101021110102110222などのモールス信号を表示できます。ここで、1はdit 0はdah、2は無音です。222を使用すると、長い無音をコーディングできます。したがって、*-* --- *-のような信号がある場合は、102100022210のように表示できますが、1と0だけを使用して直接使用することはできません。私が言ったように「固定」ワードサイズのようなものですが、これは解釈されており、モールス符号をバイナリのまま保存するのではありません。ピアノのようなものを想像してください。ピアノのボタンしかありません。誰かにモールス信号でメッセージを残し、ボタンを黒にペイントすることができます。明確なメッセージを残す方法はありませんか?沈黙(文字と単語の間にある沈黙)を配置できるように、少なくとも1つ以上の色が必要です。これが私が意味するものです。 私は、あなたがモールス法を57-aryまたは他の何かで表現できるかどうかを尋ねていません。 このことについて著者(Charles Petzold)にメールしました。「コード」の第9章でモールス符号をバイナリコードとして解釈できることを実証していると彼は言います。 私の考えのどこが間違っていますか?私が本で読んでいるのは、モールス符号がバイナリであることは事実かどうか?それはどういうわけか議論の余地がありますか?モールス信号が1つのウィキペディアページで5進法であると言われ、バイナリコードのリストページにもリストされているのはなぜですか? 編集:著者にメールを送信し、返信がありました: - - -オリジナルメッセージ - - - From:Koray Tugay [mailto:koray@tugay.biz] 送信日:2015年3月3日火曜日午後3時16分 宛先:cp@charlespetzold.com 件名:モールス符号は本当にバイナリですか? サー、ここで私の質問を見ていただけますか:モールス符号は2進数、3進数、5進数のどちらですか?キナリー? よろしく、Koray Tugay From: "チャールズペツォルド" 宛先:「 'Koray Tugay'」 件名:RE:モールス信号は本当にバイナリですか?日付:3 2015年3月23:04:35 EET 「コード」の第9章の終わりに向かって、モールス符号をバイナリコードとして解釈できることを示します。 - - -オリジナルメッセージ - - …

1
正規表現ゴルフはNP-Completeですか?
この最近のXKCDストリップと最近のブログ投稿に見られるようにPeter Norvig(および後者を特徴とするSlashdotの物語)から、「regex golf」(正規表現分離問題と呼ばれることもあります)は、セットAのすべての単語を受け入れ、単語を受け入れない最短の正規表現を定義するパズルです。セットB. Norvigの投稿には、適度に短い候補を生成するためのアルゴリズムが含まれており、彼のアプローチはNP完全なSet Cover問題の解決を伴うことに注意しますが、そしてもちろん、彼だけが必ずしもアルゴリズムではないため、彼の解が最適であるとは限りません。また、他の確実な多項式時間アルゴリズムが同等またはより良い解を見つける可能性もあります。 具体性のために、また最適化の問題を解決する必要を避けるために、正規表現分離の最も自然な定式化は次のようになると思います。 2(有限)与えられたセットとB、いくつかのアルファベットを超える文字列のΣを、長さの正規表現があり≤ kの中のすべての文字列受け付けAをし、内のすべての文字列を拒否するBは?AAABBBΣΣ\Sigma≤k≤k\leq kAAABBB この特定の分離問題の複雑さについて何か知られていますか?(とBを文字列の有限セットとして指定しているため、問題のサイズの自然な概念はAとBのすべての文字列の合計の長さであることに注意してください。これはkからの寄与を圧倒します)。それは NP完全である可能性が非常に高いと思われますが(実際、何らかのカバー問題への削減が期待されます)、いくつかの検索は特に有用なものを見つけていません。AAABBBAAABBBkkk

7
ガベージコレクションされた言語のオブジェクトデストラクターパラダイムがなぜ普及しないのですか?
ガベージコレクションされた言語設計に関する決定についての洞察を探しています。おそらく、言語の専門家が私を啓発できるでしょうか?私はC ++のバックグラウンドを持っているので、この領域は私を困惑させます。 Ruby、Javascript / ES6 / ES7、Actionscript、LuaなどのOOPyオブジェクトをサポートするほとんどすべてのガベージコレクション言語は、デストラクタ/ファイナライズパラダイムを完全に省略しているようです。Pythonは、そのclass __del__()メソッドを持つ唯一のものであるようです。どうしてこれなの?オブジェクトのデストラクタ/ファイナライズメソッドの効果的な実装を妨げる自動ガベージコレクションを使用する言語には、機能的/理論的な制限がありますか? これらの言語がメモリを管理する価値のある唯一のリソースと見なしていることは非常に欠けていると思います。ソケット、ファイルハンドル、アプリケーションの状態はどうですか?オブジェクトファイナライズの非メモリリソースと状態をクリーンアップするカスタムロジックを実装する機能がない場合、アプリケーションにカスタムmyObject.destroy()スタイルの呼び出しを散らかし、クリーンアップロジックを「クラス」の外に配置し、カプセル化を中断し、 gcによって自動的に処理されるのではなく、人的エラーによるリソースリークへのアプリケーション。 これらの言語がオブジェクト破棄のカスタムロジックを実行する方法を持たないことにつながる言語設計の決定は何ですか?正当な理由があると想像しなければなりません。これらの言語がオブジェクトの破壊/最終化をサポートしなくなった技術的および理論的な決定をよりよく理解したいと思います。 更新: おそらく私の質問を表現するより良い方法: なぜ言語には、カスタムインスタンス化(コンストラクター)とともにクラスまたはクラスに似た構造を持つオブジェクトインスタンスの組み込みコンセプトがありますが、完全に破棄/ファイナライズ機能を省略しますか?自動ガベージコレクションを提供する言語は、オブジェクトが使用されなくなったときに100%の確実性でわかるように、オブジェクトの破壊/最終化をサポートする主要な候補のようです。しかし、これらの言語のほとんどはサポートしていません。 私は、デストラクタが呼び出されることは決してないだろうとは思わない。それは、gcsが回避するように設計されているコアメモリリークだからだ。デストラクタ/ファイナライザは、将来の不確定な時間まで呼び出されないかもしれないが、JavaまたはPythonが機能をサポートするのを止めなかったという議論を見ることができました。 オブジェクトのファイナライズをサポートしない理由は、言語設計の中核となる理由は何ですか?

7
アセンブリ言語が必要なのはなぜですか?
私たちは主に高レベル言語でプログラムを書きます。それで勉強しながらアセンブリ言語に出会いました。したがって、アセンブラーはアセンブリー言語を機械語に変換し、コンパイラーは高水準言語でも同じことを行います。アセンブリ言語には、move r1 r3、move a 5などの指示があります。勉強するのはかなり難しいです。では、なぜアセンブリ言語が作成されたのでしょうか?コンピューター工学のクラスでアセンブラーについて勉強するのはなぜですか?

7
すべてのチューリング完全言語は交換可能ですか
プログラミングの方法は知っていますが、CS理論の初心者です。 この答えによると チューリング完全性は、計算可能性の抽象的な概念です。言語がチューリング完全である場合、他のチューリング完全言語が実行できる計算を実行できます。 そして、チューリング完全言語で書かれたプログラムは、別のプログラムで書き直すことができます。 OK。意味あり。Cをアセンブリに翻訳(コンパイル)できます(そして、私は毎日それを行います!)。また、アセンブリをCに翻訳できます(Cで仮想マシンを書くことができます)。同じことが他の言語にも当てはまります。任意の言語をアセンブリにコンパイルし、別の言語で記述されたVMで実行できます。 しかし、チューリング完全言語で書かれたプログラムを別のプログラムで書き直すことはできますか? アセンブリにLIGHTBUTTONオペコードがある場合はどうなりますか?私は物理的に電球のないシステム(言語)でその言語をエミュレートすることはできません。 OK。つまり、コンピューター理論を扱っているので、物理的なデバイスの制限については話していません。 しかし、乗算を持たないデバイスはどうでしょうか?分割?私の知る限り(これはmath.SEの問題ですが)、加算と減算を使用して乗算をエミュレートすることはできません(もちろん、除算はエミュレートできません)[1]。 では、「完全な言語のチューリング」(加算、減算、およびジャンプが可能)は、加算、減算、乗算、およびジャンプが可能な別の言語をどのようにエミュレートしますか? 編集 [1]。任意の実数上。

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