コンピュータサイエンス

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

8
すべての表現が意味をなすプログラミング言語
推奨に従って、私はこれをStack Overflowから再投稿しています。 最近、次の問題を考えています。 標準の「Hello world!」のコードを検討してください。プログラム: main() { printf("Hello World"); } これで、このコードのほとんどすべての変更は完全に役に立たなくなり、実際、ほとんどすべての変更はコードのコンパイルを妨げます。例えば: main(5 { printf("Hello World"); } さて、実際の質問に。シンボルのあらゆる可能な組み合わせ、つまりすべての表現が意味をなすプログラミング言語はありますか?私はある種の解決策について考えてみましたが、2つ考えました 限られた数の変数を持つPostfix。基本的に、コードを記述する前にすべての変数が既に定義されているので、それらを操作する必要があります。理論的には、多くの単純なプログラムのチェーンを形成して、それぞれが他の人に結果を供給することにより、任意の数の操作を実行できます。コードは、後置記法の一連の文字として書くことができます。 変数のスタックを持つ「Postfix」。変数はスタックに保存されます。すべての操作は、上から2つの変数を取り、その場所に結果を置きます。プログラムは、最後の操作または変数に到達すると終了します。 個人的に私はこれらの両方が嫌いです。それらは限られているだけでなく、優雅でもありません。これらは回避策のような実際のソリューションではなく、本質的に外部プロセスへの一部の作業の「オフショアリング」です。 この問題を解決する方法は他にありますか?

5
オブジェクト検出、セマンティックセグメンテーション、およびローカリゼーションの違いは何ですか?
私は非常に多くの出版物でそれらの言葉を読みましたが、オブジェクト検出とセマンティックセグメンテーションとローカリゼーションの違いを明確にする用語のいくつかの素晴らしい定義が欲しいです。定義のソースを提供できると便利です。

10
すべてのコンピューターに対応したユニバーサルアセンブリ言語は可能ですか?
アセンブリ言語についていくつか質問をしたいと思います。私の理解では、機械語に非常に近いため、より高速で効率的になります。 さまざまなコンピューターアーキテクチャが存在するため、異なるアーキテクチャ向けにアセンブリで異なるコードを記述する必要がありますか?もしそうなら、なぜAssemblyではない、一度書く-どこでも言語の種類を実行する?単純に汎用化するのは簡単ではないので、一度書くだけで、さまざまな構成のほぼすべてのマシンで実行できますか?(それは不可能だと思いますが、具体的で詳細な答えが欲しいです) Cが私が探している言語だと言う人もいるかもしれません。私は以前にCを使用したことはありませんが、おそらくJavaよりも高速かもしれませんが、Cはまだ高レベル言語だと思います。私はここで間違っているかもしれません。

4
なぜ計算可能な関数は再帰関数とも呼ばれますか?
計算可能性理論では、計算可能関数は再帰関数とも呼ばれます。少なくとも一見、日常のプログラミングで「再帰的」と呼ばれるもの(つまり、自分自身を呼び出す関数)と共通点はありません。 計算可能性の文脈における再帰の実際の意味は何ですか?これらの関数が「再帰的」と呼ばれるのはなぜですか? 言い換えると、「再帰性」の2つの意味の関係は何ですか?

4
ガベージコレクターはどのようにスタックオーバーフローを回避しますか?
それで、ガベージコレクターがどのように機能するかを考えていて、興味深い問題を考えました。おそらく、ガベージコレクターはすべての構造を同じ方法で走査する必要があります。彼らは、リンクリストやバランスの取れたツリーなどを横断している天気を知ることができません。また、検索でメモリを使い果たすこともできません。1つの可能な方法、およびALL構造をトラバースする唯一の方法は、バイナリツリーの場合と同じようにすべて再帰的にトラバースすることです。ただし、これにより、リンクリストまたは単にバランスの悪いバイナリツリーでスタックオーバーフローが発生します。しかし、私が今まで使用したガベージコレクション言語はすべて、このようなケースに対処するのに問題がないようです。 ドラゴンブックでは、「スキャンされていない」種類のキューを使用しています。基本的に、構造を再帰的にトラバースするのではなく、キューとしてマークする必要があるものを追加し、最後にマークされていないものごとに削除します。しかし、このキューは非常に大きくなりませんか? それでは、ガベージコレクタはどのように任意の構造をトラバースしますか?このトラバーサル技術はどのようにオーバーフローを回避しますか?

2
C ++ベクトルのpush_backが常に償却されるのはなぜですか?
私はC ++を学習していますが、ベクターのpush_back関数の実行時間が一定の「償却」であることに気付きました。文書にはさらに、「再割り当てが行われた場合、再割り当て自体が全体のサイズで線形になります」と記載されています。 これは、push_back関数がであることを意味するべきではありません。ここで、nはベクトルの長さです。結局のところ、最悪の場合の分析に興味がありますよね?O(n)O(n)O(n)nnn 決定的に、形容詞「償却」が実行時間をどのように変えるか理解していないと思います。

10
非決定論が有用な概念であるのはなぜですか?
オートマトンは、デジタルコンピューターの抽象的なモデルです。デジタルコンピューターは完全に決定論的です。それらの状態はいつでも入力と初期状態から一意に予測可能です。 実際のシステムをモデル化しようとしているとき、なぜオートマタ理論に非決定性を含めるのですか?

8
ランダムネスとは
私はコンピューターサイエンスの学生で、現在システムシミュレーションとモデリングコースに登録しています。それは私たちの周りの日常のシステムに対処し、たとえばIIDやGaussianなどの異なる分布曲線で乱数を生成することで、異なるシナリオでそれらをシミュレートすることを伴います。私はboidsプロジェクトに取り組んできましたが、まさに「ランダム」とは実際には何であるかという質問がありました。たとえば、Math.random()Java のメソッドを介したプログラミング言語でも、生成されるすべての乱数は、基本的に「アルゴリズム」に従って生成されます。 特定のモデルを可能な限り正確にシミュレートするために、実際に生成される数字のシーケンスが実際にランダムであり、それが役立つことをどのように本当に知ることができますか?

1
Pastryのルーティングテーブルの作成方法
この質問は、Computer Science Stack Exchangeで回答できるため、Software Engineering Stack Exchangeから移行されました。 7年前に移行され ました。 Pastry Distributed Hash Tableを実装しようとしていますが、いくつかのことが理解を逃れています。私は誰かが明らかにできることを望んでいた。 免責事項:私はコンピューターサイエンスの学生ではありません。私は人生で正確に2つのコンピューターサイエンスコースを受講しましたが、どちらもリモートで複雑なものを扱っていません。私はソフトウェアで長年働いてきたので、アイデアに頭を包むことができれば、実装タスクに任せていると感じます。だから、明らかな何かを見逃しているだけかもしれません。 著者が発表した論文[1]を読んで、ある程度の進歩を遂げましたが、ルーティングテーブルの動作に関するこの1つの特定のポイントに固執し続けています。 論文は、 ノードのルーティングテーブル、それぞれエントリの 行に編成されます。ルーティングテーブルの行のエントリは、nodeIdが最初のn桁で現在のノードのnodeIdを共有するが、番目の桁が可能な値のいずれかを持つノードを参照します現在のノードのID の番目の数字以外。⌈ ログ2 B N ⌉ 2 B - 1 2 B - 1件の、N 、N + 1 2 B - 1 、N + 1をRRR⌈ ログ2bN⌉⌈log2b⁡N⌉\lceil \log_{2^b} N\rceil2b− 12b−12^b - 12b− 12b−12^b - 1nnnn …

1
歌のクラスタリング(ジョー・ウォルシュ問題)
イーグルスは、70年代および80年代のロックスーパーグループであり、Hotel Californiaなどのクラシックを担当しています。それらには、ギタリストのジョー・ウォルシュがいる(たとえば、Life in the Fast Laneにある)ものと、彼がいない2つの非常に特徴的な音があります。後者の曲は、より陰鬱で退屈な感じがします。 (教師なし)学習アルゴリズムが2つの音の違いを検出できる程度を理解したいと思います。スピードメタルとクラシック音楽の違いは簡単にわかると思いますが、同じバンドのサウンドはどうでしょうか。 そのような実験をどのように設定しますか?何らかの標準形式の関連オーディオファイルが既にあると仮定します。 これは、1980年にリードシンガーを変更したAC / DCなど、他のロックグループにも当てはまることに注意してください。

5
lambda-反射を伴う計算
私は、リフレクションに関する推論、つまり実行中のプログラムのイントロスペクションと操作をサポートする簡単な計算を探しています。 型なしの -calculus拡張機能があり、これを使用して -termsを構文的に操作し、後で評価できる形式に変換できますか?λλλ\lambdaλλ\lambda 微積分には2つの主な追加用語があると思います。 r e f l e c t v reflect v\mathtt{reflect}\ v:を取り、構文操作に修正可能な表現を生成します。vvvvvvv e v a l v eval v\mathtt{eval}\ v:用語の構文表現を取り、それを評価します。 リフレクションをサポートするには、用語の構文表現が必要です。次のようになります。 (L A M R (e ))R (e )eλx.eλx.e\lambda x.e用語として表現される、 の反射バージョンであり、、(LAM R(e))(LAM R(e))(\mathsf{LAM}\ R(e))R(e)R(e)R(e)eee (A P P R (e )R (e ′))e e′e e′e\ e'用語として表現される、および(APP R(e) …

2
請求書の問題を一括して支払う
ありテーブルの人々が。番目の人が支払わなければならないドルを。nnniiipipip_i 一部の人々は正確にを支払うための適切な請求書を持っていないため、次のアルゴリズムを考え出します。pipip_i まず、誰もが自分のお金の一部をテーブルに置きます。その後、各個人は彼らが過払いしたお金を取り戻します。 法案には、金種の固定セットがあります(入力の一部ではありません)。 例:アリスとボブの2人がいるとします。アリスは負っている$ 5と5枚の持っている$ 1札を。ボブは負って$ 2と1つの持っている$ 5法案を。アリスとボブがすべてのお金をテーブルに置いた後、ボブは3 ドルを取り戻し、誰もが幸せです。 もちろん、お金をすべてテーブルに置く必要がない場合もあります。たとえば、アリスが1,000 ドルの請求書を持っている場合、彼女はそれらをすべてテーブルに置いてから、ほとんどを取り戻す必要はありません。 次のプロパティを持つアルゴリズムを見つけたい: 入力は、人数、各人が支払うべき金額、各人の各宗派の請求書を指定します。 このアルゴリズムは、最初のラウンドでテーブルに置く請求書を各個人に伝えます。 このアルゴリズムは、2回目のラウンドでテーブルから削除する請求書を各個人に伝えます。 テーブルに置かれた請求書の数+テーブルから削除された請求書の数は最小化されます。 実行可能な解決策がない場合、アルゴリズムはエラーを返します。

1
ロープ用にヴァンエムデボアスの木に相当するものはありますか?
私が知っている誰かが近い将来にテキストエディタを実装することを計画しているので、テキストエディタにとってどのようなデータ構造が高速かを考えるようになりました。最も使用される構造は、明らかにロープまたはギャップバッファです。 Van Emde Boasツリーは、最速の優先度キューの周りにあります。もしあなたがそこに入れることができるアイテムの数と大きな初期化コストの上限を気にしないなら。私の質問は、van Emde Boasツリーと同じくらい速いが、テキストエディター操作をサポートするデータ構造が存在するかどうかです。 データ構造でサポートする必要があるのは最大文字です(場合、最大4GBのASCII文字をサポートします)。私たちは許可されている時間新しいデータ構造を初期化します。次の操作をサポートしたいと思います。ログM = 32 √mmmlogm=32log⁡m=32\log m = 32m−−√m\sqrt{m} 位置に文字を挿入し(これにより、後続のすべての文字の位置を1ずつ増やし)。O (log log m )iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) 位置の文字を削除し中。O (log log m )iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) 位置にある文字を返します。中。O (log log m )iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) したがって、insert(0、 'a')に続いてinsert(0、 'b')を実行すると、「ba」になります。 さらに良いのはこれです: いくつかのインデックスへの「ポインタ」を返します中。O (log log m )iiiO(loglogm)O(log⁡log⁡m)O(\log \log m) 'pointer'を指定すると、この位置にある文字を返します。O(1)O(1)O(1) 'pointer'を指定すると、この位置の文字を削除します。O(1)O(1)O(1) 「ポインタ」を指定すると、この位置に文字を追加し、次の位置へのポインタを返します。O(1)O(1)O(1) (オプション) 'pointer'を指定すると、次/前の文字への …

1
アルゴリズム設計におけるマトロイドとグリードイドはどのくらい基本的ですか?
当初、マトロイドは、いくつかのグラウンドセットIに対するサブセットコレクションの線形独立性の概念を一般化するために導入されました。この構造を含む特定の問題により、貪欲なアルゴリズムが最適なソリューションを見つけることができます。欲張り法によって最適な解決策を見つけることを可能にするより多くの問題を捕捉するために、この構造を一般化するために、後にグリードイドの概念が導入されました。EEEIII これらの構造は、アルゴリズム設計でどのくらいの頻度で発生しますか? さらに、多くの場合、貪欲なアルゴリズムでは最適なソリューションを見つけるために必要なものを完全にキャプチャすることはできませんが、それでも非常に優れた近似ソリューションを見つけることができます(たとえば、Bin Packing)。それを考えると、問題がグリードイドまたはマトロイドにどれだけ「近い」かを測定する方法はありますか?

5
Vertical Sticksチャレンジへのアプローチ方法
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的なコンピューターサイエンススタック交換から移行されました。 7年前に移行され ました。 この問題はinterviewstreet.comから取られています セグメント端点がおよびようなラインセグメントを表す整数の配列が与えられます。各セグメントの上部から水平光線が左に発射され、この光線が別のセグメントに触れるかy軸に当たると停止すると想像してください。n個の整数配列を作成しここで、はセグメント最上部からの光線ショットの長さに等しくなります。を定義します。Y= { y1、。。。、yn}Y={y1,...,yn}Y=\{y_1,...,y_n\}nnn私ii(i 、0 )(i,0)(i, 0)(i 、y私)(i,yi)(i, y_i)v1、。。。、vnv1,...,vnv_1, ..., v_nv私viv_i私iiV(y1、。。。、yn)= v1+ 。。。+ vnV(y1,...,yn)=v1+...+vnV(y_1, ..., y_n) = v_1 + ... + v_n たとえば、Y= [ 3 、2 、5 、3 、3 、4 、1 、2 ]Y=[3,2,5,3,3,4,1,2]Y=[3,2,5,3,3,4,1,2]場合、[ v1、。。。、v8]=[1,1,3,1,1,3,1,2][v1,...,v8]=[1,1,3,1,1,3,1,2][v_1, ..., v_8] = [1,1,3,1,1,3,1,2]、次の図に示すように: 各順列、を計算できます。我々は一様にランダム順列を選択した場合の、の期待値は何である?[ 1 、。。。、N ] V (Y P 1、。。。、Y 、PのN)ppp[1,...,n][1,...,n][1,...,n]V(yp1,...,ypn)V(yp1,...,ypn)V(y_{p_1}, …

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