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

通常、作成後にサイズを変更できないシーケンシャルランダムアクセスデータ構造。

3
非常に大きなファイルで最も多く発生する要素を見つける
私はこのインタビューの質問をたくさん聞いたので、良い答えが何であるかについていくつかの意見をもらいたいと思っていました:10GB以上の大きなファイルがあり、どの要素が最も多く発生しているのか、良い方法を見つけたいこれをする? 多くのメモリを使用するため、マップで繰り返し追跡するのはおそらく良い考えではありません。また、エントリが入ってくるときに追跡するのは、この質問が提起されたときにファイルがすでに存在するため、最大のオプションではありません。 ファイルを分割して複数のスレッドで繰り返し処理し、それらの結果を結合することを含めた他の考えもありますが、マップのメモリの問題は依然として残っています。

1
スライス内の要素をカウントするための配列の前処理(RMQへの削減?)
配列を指定して、1、... 、nは自然数の≤ K、kは定数であるが、私は答えにしたいO (1 )の形式のクエリは:「何回んmはインデックス間の配列に現れIとj "?a1,…,ana1,…,ana_1,\ldots,a_n≤k≤k\leq kkkkO(1)O(1)O(1)mmmiiijjj アレイは線形時間で前処理する必要があります。特に、範囲の最小クエリに減少があるかどうかを知りたいです。 これは、で、間隔内の1の数を照会する場合のRMQと同等です。だから私たちはそれを使うことができます。SEの制限のため、自分の質問には答えられませんでした。k=1k=1k=1

2
Hoareスタイルの正当性の証明中に配列を処理する方法
この質問に関する議論の中で、Gillesは、配列を使用するアルゴリズムの正当性の証明には範囲外の配列アクセスがないことを証明する必要があることを正しく述べています。ランタイムモデルによっては、ランタイムエラーが発生したり、配列以外の要素にアクセスしたりします。 このような正当性の証明を実行する一般的な手法の1つは(少なくとも学部の研究では、おそらく自動検証で)、Hoareロジックを使用することです。標準のルールのセットに配列に関連するものが含まれていることは知りません。それらはモナド変数に制限されているようです。 形の公理を追加することを想像できます {0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}{0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}\qquad \displaystyle \frac{}{\{0 \leq i \lt A.\mathrm{length} \land {P[A[i]/E]} \}\ A[i] := E;\ \{P\}} ただし、右側の配列アクセスをどのように処理するか、つまり、あるステートメントx := Eの複雑な式一部である場合は、はっきりしません。EEEx:=Ex:=Ex := E 配列アクセスをHoareロジックでモデル化して、無効なアクセスがないことをプログラムの正確性を証明できるようにするにはどうすればよいですか? 答えが我々以外の文で使用される配列要素を許可しないと仮定することができるまたはいくつかの一環としてEにおけるX := Eこの表現を制限しないように。一時的な変数にいつでも必要な値を割り当てることができます。つまり、t := A [ i ]と書きます。i f(t > 0 )… i f(A [ i ] > 0 )の代わりに…A [ i ] …

2
この並べ替え/並べ替えの問題の名前は?
長さ配列が与えられます。配列の各要素は、Kクラスの1つに属しています。あなたはそのようにスワップ操作の最小数を使用してアレイを再配置することになっているすべての要素から同じクラスは常に一緒にグループ化され、それらが隣接サブアレイを形成していること、。 例えば: んnnKKK 他に3つの有効な取り決めが残っています。[ 2 、1 、3 、3 、2 、2 ] ⟶ [ 2 、2 、2 、1 、3 、3 ] 、 又は[ 2 、1 、3 、3 、2 、2 ] ⟶ [ 1 、2 、2 、2 、3 、3 ] 、 又は[ 2 、1 、3 、3 、2 、2 ] ⟶ [ 3 …

3
配列内の各要素のより小さな要素の数を効率的に見つける
私はこの問題に行き詰まっています: 最初の自然数の配列がランダムに並べ替えられると、配列が構築され、 はよりも小さいからまでの要素数になります。。 n B B (k )A (1 )A (k − 1 )A (k )AAAnnnBBBB(k)B(k)B(k)A(1)A(1)A(1)A(k−1)A(k−1)A(k-1)A(k)A(k)A(k) i)が与えられれば、時間でを見つけることができますか? ii)が与えられた場合、を時間で見つけることができますか?B O (n )B A O (n )AAABBBO(n)O(n)O(n)BBBAAAO(n)O(n)O(n) ここで、です。具体的な例: | A 8 4 3 1 7 2 9 6 5 B 0 0 0 0 3 1 6 4 4 |B(1)=0B(1)=0B(1) = 0∣∣∣AB804030107321966454∣∣∣|A843172965B000031644|\begin{vmatrix} …

2
配列の最小差を見つけるアルゴリズム
長さの整数の配列が与えられたときに、配列内の2つの整数間の最小差を見つけるアルゴリズムが必要です。nnn そのようなアルゴリズムの1つは、配列を並べ替えて、隣接する数値のペアをチェックすることです。これには時間がかかります。O(nlogn)O(nlog⁡n)O(n\log n) アルゴリズムなど、より高速な方法はありますか?O(n)O(n)O(n)

1
2つの順序付け制約を同時に満たす最大長の部分列を見つける
我々は、セット与えられるの果実を。各フルーツには価格とビタミン含有量ます。果物を順序付けられたペアに関連付けました。次に、ソートされたリストに価格が昇順で、ビタミン含有量が降順で含まれるように、これらの果物を配置する必要があります。F={f1,f2,f3,…,fN}F={f1,f2,f3,…,fN}F=\{f_1, f_2, f_3, …, f_N\}NNNPiPiP_iViViV_ififif_i(Pi,Vi)(Pi,Vi)(P_i, V_i) 例1:および。N=4N=4N = 4F={(2,8),(5,11),(7,9),(10,2)}F={(2,8),(5,11),(7,9),(10,2)}F = \{(2, 8), (5, 11), (7, 9), (10, 2)\} すべての価格が昇順で、ビタミン含有量が降順であるようにリストを配置すると、有効なリストは次のようになります。 [(2,8)][(2,8)][(2, 8)] [(5,11)][(5,11)][(5, 11)] [(7,9)][(7,9)][(7, 9)] [(10,2)][(10,2)][(10, 2)] [(2,8),(10,2)][(2,8),(10,2)][(2, 8), (10, 2)] [(5,11),(7,9)][(5,11),(7,9)][(5, 11), (7, 9)] [(5,11),(10,2)][(5,11),(10,2)][(5, 11), (10, 2)] [(7,9),(10,2)][(7,9),(10,2)][(7, 9), (10, 2)] [(5,11),(7,9),(10,2)][(5,11),(7,9),(10,2)][(5, 11), (7, 9), (10, 2)] 上記のリストから、最大サイズのリストを選択したいと思います。複数のリストに最大サイズがある場合、価格の合計が最小となる最大サイズのリストを選択する必要があります。上記の例で選択する必要があるリストは、です。{(5,11),(7,9),(10,2)}{(5,11),(7,9),(10,2)}\{(5, …

2
合計でのオーバーフローの検出
私はの配列を指定していたとの固定幅の整数を(彼らは幅のレジスタに収まるすなわち)、。2の補数演算を備えたマシンで合計を計算します。これは、ラップアラウンドセマンティクスでを法とする加算を実行します。それは簡単ですが、合計がレジスタサイズをオーバーフローする可能性があり、オーバーフローすると、結果が不正になります。nnnwwwa1,a2,…ana1,a2,…ana_1, a_2, \dots a_nS=a1+…+anS=a1+…+anS = a_1 + \ldots + a_n2w2w2^w 合計がオーバーフローしない場合は、それを計算し、オーバーフローがないことをできるだけ早く確認したいと考えています。合計がオーバーフローした場合、それがオーバーフローしていることだけを知りたいので、値は気にしません。 部分的な合計がオーバーフローする可能性があるため、単純に順番に数値を追加することはできません。たとえば、8ビットレジスタでは、は有効であり、合計がですが、部分合計がレジスタ範囲オーバーフローします。(120,120,−115)(120,120,−115)(120, 120, -115)125125125120+120120+120120+120[−128,127][−128,127][-128,127] 明らかに、より大きなレジスタをアキュムレータとして使用することもできますが、可能な限り最大のレジスタサイズをすでに使用している興味深いケースを想定してみましょう。 現在の部分合計とは逆の符号を持つ数値を追加するよく知られた手法があります。この手法は、キャッシュに優しくなく、分岐予測や投機的実行をあまり活用しないという犠牲を払って、すべてのステップでオーバーフローを回避します。 おそらく部分合計をオーバーフローする権限を利用し、オーバーフローフラグ、キャッシュ、分岐予測子、および投機的実行とロードを備えた一般的なマシンでより高速な手法はありますか? (これは、オーバーフローの安全な合計のフォローアップです)

6
C ++文字列と文字配列
大学レベルのコンピューターサイエンスを教えるほとんどのC ++インストラクターが、文字列をテキストに使用することを思いとどまらせたり、禁止したりするのではなく、学生に文字配列の使用を要求するのはなぜだと思いますか? 私はこの方法論が何らかのプログラミング習慣を教えることを意図していると想定していますが、私の経験では、文字列の使用だけで何も問題はなく、使用と学習が非常に簡単です。

2
最大セグメントで共有されるポイントを見つける
与えられた: NNN 順序付けられた整数のセグメント(配列)、整数は −K−K-K に KKK。 例: Segment 1: [-2,-1,0,1,2,3] Segment 2: [1,2,3,4,5] Segment 3: [-3,-2,-1,0,1] それらを[min、max] ---として表すことができます---同等です: Segment 1: [-2,3] Segment 2: [1,5] Segment 3: [-3,1] セグメントの最大数に属する整数を見つけるにはどうすればよいですか?この例では、1です。 私は最も効率的なアルゴリズムを探します。

1
適用順言語は、一定時間の配列書き込みをサポートしていませんか?そうでない場合、なぜそうではないのですか?
私はSteven Skienaの「The Algorithm Design Manual」を読んでおり、155ページの彼のウォーストーリーの 1つで彼は次のように述べています。 Mathematicaでは、計算の適用モデル(配列への一定時間の書き込み操作をサポートしていない)と解釈のオーバーヘッド(コンパイルではない)のため、効率はMathematicaの大きな課題です。 私はすでにSICPを読んでいるので、適用言語と通常順序言語の違いに精通しています(つまり、通常順序言語は必要になるまで手続き引数の評価を遅らせますが、適用順序言語はそれらが評価されるとすぐに評価しますプロシージャが呼び出されます)。しかし、上記のスキーナの文は、アプリケーション順言語のアイデアと、一定時間より悪い配列書き込みのアイデアとを関連付けているようです。AbelsonとSussmanが彼らのテキストでこれを言及したのを覚えていないので、これは驚きでした。 trueの場合、アプリケーション順言語が一定の時間内に配列に書き込みを行わない理由は何ですか?配列の書き込み時間を決定するときに評価の順序が重要になるのはなぜですか? 私はビッグ-Oの書き込みパフォーマンスは何も興味がある決定的な答えがありますしない限り、私はその質問をスキップしますので、この場合には、私は言語の実装に依存している想像してみてください。
7 arrays 

2
ソートされた配列に対するヒープの利点は何ですか?
私はヒープにかなり慣れていないので、ソートされた配列がデフォルトで最小/最大プロパティを提供しているように見えるときに、最小ヒープと最大ヒープがツリーとして表される理由に頭を抱えようとしています。 そしてフォローアップ:クイックソートのようなアルゴリズムがソートを非常にうまく処理する場合、ヒープへの挿入の複雑さを処理する利点は何ですか? コンテキスト:私はPythonでCLRS / MIT 6.006を使用していて、葉の値の整数表現しか見ていません。これは、各リーフに簡単にソートできない構造体が含まれているCなどの言語でより適切ですか?

3
コンパイラーは、配列への交互アクセスを検出してメモリーにインターリーブできますか?
配列が別の方法でアクセスされるループを最適化するコンパイラを設計することは可能ですか?たとえば、次のようになります。 // int[] a,b int sum = 0; for(int i = 0; i < n; i++) { sum += a[i] + b[i]; } 通常のシーケンシャルアレイ装置と、a[i]及びb[i]互いに離れメモリであってもよいです。したがって、優れたコンパイラ最適化はそれを検出しa[i]、b[i]常に「同時に」アクセスされることを検出し、インターリーブされた配列を格納します。a[0] b[0] a[1] b[1] ...つまり、1つのメモリアクセスでa[i]との両方を取得できますb[i]。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.