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

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

3
配列をインターリーブするためのインプレースアルゴリズム
要素の配列が与えられます2n2n2n a1,a2,…,an,b1,b2,…bna1,a2,…,an,b1,b2,…bna_1, a_2, \dots, a_n, b_1, b_2, \dots b_n タスクは、結果の配列が次のようになるようにインプレースアルゴリズムを使用して配列をインターリーブすることです b1,a1,b2,a2,…,bn,anb1,a1,b2,a2,…,bn,anb_1, a_1, b_2, a_2, \dots , b_n, a_n インプレース要件がなければ、新しい配列を簡単に作成し、要素をコピーして時間アルゴリズムを提供できます。O(n)O(n)\mathcal{O}(n) インプレース要件では、分割統治アルゴリズムはアルゴリズムを上げ。θ(nlogn)θ(nlog⁡n)\theta(n \log n) 質問は次のとおりです。 あるその場でもあり、時間アルゴリズムは、?O(n)O(n)\mathcal{O}(n) (注:均一コストのWORD RAMモデルを想定できるため、インプレースはスペース制限に変換されます)。O(1)O(1)\mathcal{O}(1)

6
(オープン)ソースコードでの文字列の秘密の保持
Android用のアプリの開発が完了し、GPLで公開するつもりです-オープンソースにしたいです。ただし、アプリケーション(ゲーム)の性質は、なぞを尋ね、文字列リソースにコード化された回答を持っていることです。答えを公開できません!パスワードを安全に保存することを検討するように言われましたが、適切なものが見つかりませんでした。 隠された、暗号化された、または隠された文字列配列を使用してソースコードを公開することは可能ですか?たぶんオンラインデータベースから答えを読むことで? 更新 以下のYuval Filmusのソリューションが機能しました。私が最初にそれを読んだとき、私はまだそれをする方法がわかりませんでした。2番目のオプションに対するいくつかのソリューションを見つけました。ハッシュされたソリューションをソースに保存し、ユーザーが推測するたびにハッシュを計算します。javascriptでこれを行うには、http: //code.google.com/p/crypto-js/にcrypto-jsライブラリがあります。Androidの場合、MessageDigest関数を使用します。呼ばれる(fdroid / githubの上の)アプリケーションがありHashPassこれを行います。
50 arrays  security 

4
「ソート度」の測定方法
配列の「ソート度」を測定する標準的な方法があるかどうか疑問に思っていますか?可能性のある反転の中央値を持つ配列は、最大限にソートされていないと見なされますか?つまり、基本的には、並べ替えまたは逆並べ替えのいずれかが可能な限り行われないということです。

5
ソートされた配列に要素を追加する
これを行うための最速の方法は何ですか(アルゴリズムの観点からも、実際的な問題からも)? 私は次の線に沿って何かを考えていました。 配列の末尾に追加して、これに近いベストケース(開始時に完全にソートされた配列)があり、実行時間が線形である(最適な場合)ので、バブルソートを使用できます。 一方、ソートされた配列から開始することがわかっている場合、バイナリ検索を使用して、指定された要素の挿入ポイントを見つけることができます。 私の考えでは、2番目の方法はほぼ最適ですが、そこに何があるのか​​興味があります。 どうすればこれを最適に行うことができますか?

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)

3
時間でサイズ3のソートされたサブシーケンスを見つけるアルゴリズムはありますか?
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的なコンピューターサイエンススタック交換から移行されました。 7年前に移行され ました。 Iは、証明または反証配列が与えられると、アルゴリズムが存在する整数を三の指数を見つけ、私は、Jおよびkのように、I &lt; J &lt; KとA [ I ] &lt; A [ J ] &lt; A [ kは】(または、そのようなトリプルがないことがわかります)線形時間で。AAA私、ji,ji, jkkki &lt; j &lt; ki&lt;j&lt;ki < j < kA [ i ] &lt; A [ j ] &lt; A [ k ]A[i]&lt;A[j]&lt;A[k]A[i] < A[j] < A[k] これは宿題の質問ではありません。「そのようなアルゴリズムを実装してみてください」とフレーム化されたプログラミングフォーラムでそれを見ました。さまざまな実験の後では不可能だと思います。私の直感はそう教えてくれますが、それは実際には何の役にも立ちません。 正式に証明したいと思います。どうやってやるの?理想的には、段階的にレイアウトされた証明を見たいと思います。そして、もしあなたがとても傾いているなら、このような簡単な質問を一般的に証明/反証する方法についての説明をご覧ください。それが役立つ場合、いくつかの例: [1,5,2,0,3] → …

1
固定サイズの既存のデータ構造があり、新しい要素が挿入された場合、最も古い/最後の要素を押し出しますか?
新しい要素が挿入された場合に最も古い/最後の要素をプッシュするデータ構造を探しています。たとえばD、構造を表します。Dタイプの3つの要素が含まNumber Dのデフォルト値に初期化される1, 2とし3。 D = [ 1 、2 、3 ]D=[1、2、3]D = [1, 2, 3] 場合にNumber値が含まれていることが5中に挿入されD、3押し出さされ、一方1及び2右にシフトされます。 D = [ 5 、1 、2 ]D=[5、1、2]D = [5, 1, 2] 最初に頭に浮かぶのは配列ですが、定義にはプッシュ動作が含まれていません。

1
配列の初期化を保存する
私は最近、初期化する必要のない配列を持つことができる、つまり、各メンバーをデフォルト値に設定しようとする時間を費やすことなく使用できることを読みました。つまり、初期化せずにデフォルト値で初期化されたかのように配列の使用を開始できます。(申し訳ありませんが、これをどこで読んだか覚えていません)。 たとえば、なぜそれが驚くべきことなのかについて: 範囲の整数の最悪のケースハッシュテーブル(各挿入/削除/検索用)をモデル化しようとしているとします 。O(1)O(1)\mathcal{O}(1)[1,n2][1,n2][1, n^2] サイズビットの配列を割り当て、個々のビットを使用してハッシュテーブル内の整数の存在を表すことができます。注:メモリの割り当てはO(1 )時間と見なされます。n2n2n^2O(1)O(1)\mathcal{O}(1) これで、この配列をまったく初期化する必要がなかった場合、このハッシュテーブルでの操作のシーケンスは、最悪の場合O(n )になります。nnnO(n)O(n)\mathcal{O}(n) したがって、実際には、「完全な」ハッシュ実装があります。これは、操作に対して Θ (n 2)スペースを使用しますが、O(n )時間で実行されます。nnnΘ(n2)Θ(n2)\Theta(n^2)O(n)O(n)\mathcal{O}(n) 通常、ランタイムは少なくともスペース使用量と同じくらい悪いことが予想されます! 注:上記の例は、スパースセットまたはスパースマトリックスの実装に使用される可能性があるため、理論的に興味深いだけではありません。 質問は次のとおりです。 初期化ステップをスキップできるデータ構造のような配列を持つことはどのように可能ですか?

3
nで割り切れる最大の合計
StackOverflowでこの質問をしましたが、ここがより適切な場所だと思います。 これは、アルゴリズムコースの概要からの問題です。 n個の正の整数を持つ配列があります(配列を並べ替えたり、要素を一意にする必要はありません)。示唆O (N )で割り切れる要素の最大和見つけるためのアルゴリズムをnと。aaannnO(n)O(n)O(n)nnn 例: = [ 6 、1 、13 、4 、9 、8 、25 ] 、N = 7。答えは56(要素と6 、13 、4 、8 、25)a=[6,1,13,4,9,8,25],n=7a=[6,1,13,4,9,8,25],n=7a = [6, 1, 13, 4, 9, 8, 25], n = 75656566,13,4,8,256,13,4,8,256, 13, 4, 8, 25 それはそれを見つけることは比較的簡単です動的プログラミングを使用して、残りで最大の和を格納0 、1 、2 、。。。、n − 1。O(n2)O(n2)O(n^2)0,1,2,...,n−10,1,2,...,n−10, 1, 2,..., n - 1 また、我々は要素の連続配列に注意を制限した場合、それはに最適なシーケンスを見つけるのは簡単だ時間、部分和を格納することによって、モジュロN:聞かせてS …

9
O(n)時間で5つの繰り返し値を見つける方法は?
あなたはサイズの配列があるとのn ≥ 6n≥6n \geq 6から整数含むにちょうど5を繰り返して、包括的に。時間で繰り返される数を見つけることができるアルゴリズムを提案する必要があります。私の人生では何も考えられません。ソートは、せいぜい思いますか?配列を走査するとになり、ます。ただし、リンクリスト、キュー、スタックなどのトリッキーなものを見たので、並べ替えが必要かどうかはわかりません。111n−5n−5n − 5O(n)O(n)O(n)O(nlogn)O(nlogn)O(n\log n)O(n)O(n)O(n)O(n2logn)O(n2logn)O(n^2\log n)

6
1つの配列に2つのスタックを実装する方法は?
まず、これは宿題の問題ではないと言いたいです。私はアルゴリズムの紹介-優れたプログラマーになるための有名なCLRSテキストを読んでいます。私はこの本で与えられた問題と演習を自分で解決しようとしています。 私が解決しようとしているエクササイズ10.1-2をから第10章基本データ構造 CLRS第二版から。その状態は次のとおりです。 1つの配列A [1..n]に2つのスタックを実装する方法を説明します。両方のスタックの要素の合計数がnでない限り、どちらのスタックもオーバーフローしないようにします。PUSHおよびPOP操作はO(1)時間で実行する必要があります。 私がこれまでに考え出した解決策は次のとおりです。 配列A [1..n]がS1 [1..i]とS2 [i..n]の 2つのスタックを実装するようにします。 用PUSH-S1およびPUSH-S2操作、スタックが「満杯」である場合、その後に要素をプッシュスタート他のスタック(例えば、スタック場合S1は新しい要素を押し込むことしようとしているときに一杯になった後にその要素をプッシュスタックS2およびその逆)。 このアプローチの問題は、どの要素がどのスタックに属しているかを「記憶」する方法がないため、POP-S1またはPOP-S2を確実に使用できないことです。スタックの要素が(キー、値)のペアであり、キーがスタック番号である場合、要素をポップするには、最悪の場合、iまたは(ni)回-O(n )(ここで間違っている場合は、お気軽に修正してください)、これはO(1)ではありません。 私はかなり長い間質問に頭を打ち続けてきました。私は正しい軌道に乗っていますか?誰かがこの問題を解決するための私の可能なポインターを与えることができますか? 一般に、これらの問題についてどのように「考える」べきですか?または、本当に知的な人だけがこの種の問題を解決できますか?これらのような問題に取り組む/解決する(つまり、経験を積む)ことで、私はこれで良くなりますか? 悟りを待っています。

1
反転ペアのカウント
分割統治の古典的な用途は、次の問題を解決することです。 アレイ所与対:異なる、同等の要素をアレイ状に反転ペアの数をカウントし、ようにと。(i 、j )a [ i ] &gt; a [ j ] i &lt; ja [ 1 … n ]a[1…n]a[1\dots n](i 、j )(i,j)(i,j)a [ i ] &gt; a [ j ]a[i]&gt;a[j]a[i] \gt a[j]i &lt; ji&lt;ji \lt j これに対する1つのアプローチは、マージソートを実行することですが、副問題の反転ペアの数もカウントします。マージステップ中に、2つのサブ問題にまたがる反転ペアの数をカウントし、サブ問題のカウントに追加します。 これは良いですが、時間アルゴリズムを提供しますが、これは配列を台無しにします。O (n ログn )O(nlog⁡n)O(n\log n) 我々は追加の制約がある場合は、アレイは、読み取り専用であることを、我々はコピーでコピーして取引をする、またはカウントを行うために、バイナリツリーをバランス順序統計のような追加のデータ構造を使用し、どちらも使用することができますスペース。Θ (n )Θ(n)\Theta(n) 現在の問題は、実行時間に影響を与えずに、スペースを改善することです。すなわち 反転ペアの数をカウントする時間アルゴリズムはありますか。これは読み取り専用配列で機能し、サブリニア(つまり)スペースを使用しますか?o (n )O …

7
負の配列インデックスが意味をなすのはなぜですか?
私はCプログラミングの奇妙な経験に出会いました。次のコードを検討してください。 int main(){ int array1[6] = {0, 1, 2, 3, 4, 5}; int array2[6] = {6, 7, 8, 9, 10, 11}; printf("%d\n", array1[-1]); return 0; } これをコンパイルして実行しても、エラーや警告は表示されません。私の講師が言ったように、配列インデックス-1は別の変数にアクセスします。私はまだ混乱していますが、なぜプログラミング言語にはこの機能があるのですか?つまり、なぜ負の配列インデックスを許可するのですか?

1
オーバーフロー安全合計
合計が幅レジスタにも収まるように、固定幅整数(幅レジスタに収まる)、が与えられたとします。w a 1、a 2、… a n a 1 + a 2 + ⋯ + a n = S wnnnwwwa1、2、… ana1,a2,…ana_1, a_2, \dots a_na1+ a2+ ⋯ + an= Sa1+a2+⋯+an=Sa_1 + a_2 + \dots + a_n = Swww 各プレフィックスの和も幅レジスタに収まるように番号をいつでも置換できるように思えます。S i = b 1 + b 2 + ⋯ + b i wb1、b2、… …

1
配列の連続した部分配列から合計数を数える
すべてa [ i ] &gt; 0の配列が与えられます。a[1…n]a[1…n]a[1 \ldots n]a[i]&gt;0a[i]&gt;0a[i]>0 今、私たちは部分配列は、配列、すなわち、連続した範囲のです(そのサブアレイから形成することができますどのように多くの異なる合計見つける必要がある[ J ... K ]いくつかのために、合計は全ての和でありますサブアレイの要素)。例えば、場合、その後、答えは4:我々が形成することができる。a[j…k]a[j…k]a[j\ldots k]j,kj,kj,ka=[1,2,1]a=[1,2,1]a=[1,2,1]1,2,3,41,2,3,4 1,2,3,4 時間で個別の合計数をカウントする方法を知っています。O(n2)O(n2)O(n^2) さらに、私はこれが文字列の異なる部分文字列の数を見つける必要がある古典的な問題に似ていることに気付きました。私は、サフィックス配列を構築し、同様の方法で解決する可能性を考えていました(時間)。しかし、私はここで動作するようにそれを変更する方法を理解することができませんでした。たとえば、接尾辞配列を使用すると、4つの許容可能なケースの代わりに5つのケースが取得されます。これは、接尾辞配列を使用してこれを行うことは可能ですか、それとも間違った方向に考えていますか?O(n)O(n)O(n)a=[1,2,1]a=[1,2,1]a=[1,2,1] また、私が考えてきたもう1つの方向があります。分割して征服します。配列を1つの要素に縮小されるまで毎回2つの部分に分割する場合のように。1つの要素に1つの合計を含めることができます。2つの単一要素を組み合わせる場合、2つの方法で実行できます。両方の単一範囲に同じ要素がある場合、2つの異なる合計を取得するか、両方に異なる要素がある場合、3つの異なる合計を取得します。しかし、長さが1より大きい配列をマージするためにこれを一般化することはできません。2つのmサイズの配列をマージして答えを取得することは可能ですか?O(m)O(m)O(m)

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