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

整数のプロパティ、操作、アルゴリズムに関する質問。

2
和のセットを「加算解除」するための効率的なアルゴリズム
自然数Xのマルチセットが与えられた場合、すべての可能な合計のセットを考えます。 sums(X)={∑i∈Ai|A⊆X}sums(X)={∑i∈Ai|A⊆X}\textrm{sums}(X)= \left\{ \sum_{i \in A} i \,|\, A \subseteq X \right\} 例えば、sums({1,5})={0,1,5,6}sums({1,5})={0,1,5,6}\textrm{sums}(\left\{1,5\right\}) = \left\{0, 1, 5, 6\right\}ながら sums({1,1})={0,1,2}sums({1,1})={0,1,2}\textrm{sums}(\left\{1,1\right\}) = \left\{0, 1, 2\right\}。 (和の入力セットのサイズに関して測定される)逆演算を計算するための最も効率的なアルゴリズムは何ですか?具体的には、次のいずれかを効率的に計算できますか? 特定のセットが有効な合計セットであるかどうか。(例えば、{0,1,2}{0,1,2}\left\{0,1,2\right\}、有効であるが、{0,1,3}{0,1,3}\left\{0,1,3\right\}ではありません。) 指定されたセットに合計されるマルチセット。 最小の所与のセットへの合計マルチセット。(たとえば、{1,2}{1、2}\left\{1,2\right\}と{1,1,1}{1、1、1}\left\{1,1,1\right\}両方の合計{0,1,2,3}{0、1、2、3}\left\{0,1,2,3\right\}が、前者が小さいです。)

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
素数を法とする階乗を計算する最も効率的な方法は何ですか?
係数の後の階乗を効率的に計算するアルゴリズムを知っていますか? たとえば、私はプログラムしたい: for(i=0; i<5; i++) sum += factorial(p-i) % p; しかし、p階乗を直接適用するための大きな数(素数)です。(p≤108)(p≤108)(p \leq 10^ 8) Pythonでは、このタスクは本当に簡単ですが、最適化の方法を知りたいのです。



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、… …

4
有理数の比較
所与及び、a,b,c,d∈Na,b,c,d∈Na,b,c,d \in \mathbb Nb,d∉{0}b,d∉{0}b,d \notin \{0\} ab&lt;cd⟺ad&lt;cbab&lt;cd⟺ad&lt;cb \begin{eqnarray*} \frac a b < \frac c d &\iff& ad < cb \end{eqnarray*} 私の質問は: 与えられa,b,c,da,b,c,da,b,c,d 我々は決定することができると仮定すると、における、決定するどのような方法がある乗算(または分割)、プリフォームすることなくおよび。または、方法がないという何らかの証拠があります。x&lt;y∈Zx&lt;y∈Zx < y \in \mathbb ZO(|x|+|y|)O(|x|+|y|)\mathcal{O}(|x| +|y|)ad&lt;cbad&lt;cbad<cba⋅da⋅da\cdot dc⋅bc⋅bc \cdot b 分母を乗算するよりも有理数を比較するための高速な方法はありますか。

3
1からまでの各数値が、マルチセットのいくつかの要素の合計として一意に表現できるようなマルチセットの数
私の問題。与えられた、私は、有効なマルチセット数カウントする。マルチセットは次の場合に有効ですS SnnnSSSSSS の要素の合計はであり、nSSSnnn からまでのすべての数は、いくつかの要素の合計として一意に表すことができます。n S111nnnSSS 例。 たとえば、n=5n=5n=5場合、{1,1,1,1,1},{1,2,2},{1,1,3}{1,1,1,1,1},{1,2,2},{1,1,3}\{1,1,1,1,1\}, \{1,2,2\}, \{1,1,3\}は有効です。 ただし、2は\ {1,1 \}と\ {2 \}の両方で形成できるため、S={1,1,1,2}S={1,1,1,2}S=\{1,1,1,2\}は無効です(つまり、2は2 = 1 + 1および2 = 2)なので、2番目の条件は成立しません。同様に、3は\ {2,1 \}および\ {1,1,1 \}で形成できます。{1,1}{1,1}\{1,1\}{2}{2}\{2\}2=1+12=1+12=1+12=22=22=2{2,1}{2,1}\{2,1\}{1,1,1}{1,1,1}\{1,1,1\} S={1,2,4S={1,2,4S=\{1,2,4 }も無効です。これは、111から5までのすべての数値を555一意に作成できるためですが、Sの要素の合計は5でSSSはありません。555 私はかなり前からこの問題に適したアルゴリズムを見つけようとしましたが、解決できません。codechefからです。提出されたソリューションのいくつかを見ましたが、問題を解決するためのロジックをまだ取得できませんでした。注:質問の制限時間は10秒で、n&lt;109n&lt;109n<10^9 マルチセットの場合、表記S={(a1,c1),(a2,c2)...}S={(a1,c1),(a2,c2)...}S = \{(a_1, c_1), (a_2, c_2) ... \} ai&lt;ajai&lt;aja_i iai + 1= (a私c私+a私- 1 )+ 1 ⇒a私| ai + 1ai+1=(aici+ai−1)+1⇒ai|ai+1a_{i+1} = (a_ic_i + …

4
特定の乱数ジェネレータを使用して1〜100を印刷する最も効率的なアルゴリズム
RandNum501〜50の範囲で一様にランダムな整数を生成する乱数ジェネレーターが提供されます。この乱数ジェネレータのみを使用して、1から100までのすべての整数をランダムな順序で生成および出力できます。すべての数は正確に1度来る必要があり、任意の場所で任意の数が発生する確率は等しくなければなりません。 これのための最も効率的なアルゴリズムは何ですか?

3
整数の範囲を効率的に格納するデータ構造はどれですか。
コレクションを0から65535の範囲の整数で保持する必要があるため、次のことをすばやく実行できます。 新しい整数を挿入する 連続する整数の範囲を挿入する 整数を削除する 整数以下のすべての整数を削除します 整数が存在するかどうかをテストします 私のデータには、コレクションに整数の実行が含まれることが多いという特性があります。たとえば、ある時点でのコレクションは次のようになります。 { 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 } 最も単純なアプローチは、C ++ std :: setのようなバランスのとれたバイナリツリーを使用することですが、それを使用して、私はしばしば数値の実行があるという事実を利用していません。おそらく、範囲のコレクションを格納する方が良いでしょうか?しかし、これは、範囲内の整数が削除された場合、または2つの範囲間のスペースが埋められた場合に結合された場合、範囲を分割できる必要があることを意味します。 この問題に適している既存のデータ構造はありますか?


5
アフィン関数の値の言語
書き込みn¯n¯\bar nの小数展開のためnnn(なし有力で0)。ましょうとbが付き整数、可能&gt; 0。倍数の小数展開の言語を検討プラス定数を:aaabbba&gt;0a&gt;0a > 0aaa M={ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣x∈N}M={ax+b¯∣x∈N}M = \{ \overline{a\,x+b} \mid x\in\mathbb{N} \} あるMMM、通常の?コンテキストフリー? (アフィン関数のグラフの言語と対比) これは良い宿題の質問になると思います。ヒントやヒントから始めて、質問の解決方法だけでなく、使用するテクニックの決定方法も説明する回答をいただければ幸いです。

1
自然数線形システムを解くためにどのようなアルゴリズムが存在しますか?
私は次の問題を見ています: 自然数、およびいくつかの入力ベクトル次元ベクトルが与えられると、はと自然数係数の線形結合ですか?v 1、… 、v m u u v iんんnv1、… 、vメートルv1、…、vメートルv_1, \ldots, v_mあなたあなたuあなたあなたuv私v私v_i つまり、いくつかのがありますここで、ですか? U = T 1 、V 1 + ⋯ + T M のV Mt1、… 、tメートル∈ Nt1、…、tメートル∈Nt_1, \ldots, t_m \in \mathbb{N}u=t1v1+⋯+tmvmu=t1v1+⋯+tメートルvメートルu = t_1 v_1 + \dots + t_m v_m 明らかに、この問題の実数バージョンはガウスの消去法を使用して解決できます。私は不思議に思っています、この問題の整数バージョンは研究されましたか?それを解決するためにどのようなアルゴリズムが存在しますか? これは自然数を使用していますが、モジュラー演算を使用していないため、これは中国の剰余定理やそのようなシステムとは多少異なります。また、それはディオファントス方程式に関連しているようですが、非負の整数のみが考慮される場合に何が行われたのでしょうか?これは、多次元のサブセット和問題を連想させるものであり、一般化されて、各ベクトルの任意の数のコピーを取ることができます。uuuがv_1、\ dots、v_mによって生成されたラティスの要素であるかどうかのテストにも関連しているようですが、ここでは負でない係数との線形結合しか許可されていません。v1,…,vmv1,…,vmv_1,\dots,v_m 興味のある人にとっては、これは、Parikhの定理のように、Parikhベクトルが線形セットにあるかどうかを見ることによって動機付けられます。 特に、実数/浮動小数点数に入るのを避け、自然数演算のみを使用して問題を解決できるアルゴリズムに興味があります。

2
最適な通貨単位を見つけるアルゴリズム
マークは物事を過剰に考える傾向がある人々が住む小さな国に住んでいます。ある日、国の王は、変更をより効率的にするために国の通貨を再設計することを決定しました。王は、最小の紙幣の金額まで(ただし含まない)の金額を正確に支払うために必要なコインの予想数を最小限に抑えたいと考えています。 通貨の最小単位がコインであるとします。王国で最小の紙幣はコインの価値があります。王は、流通しているコインの金種が超えてはならないと決定しました。次に、問題は、を最小化するから整数のセットを見つけることは。んnnメートルmmメートルmm{d1、d2、。。。、dメートル}{d1,d2,...,dm}\{d_1, d_2, ..., d_m\}{ 1 、2 、。。。、n − 1 }{1,2,...,n−1}\{1, 2, ..., n - 1\}1n − 1Σn − 1i = 1c1(i )+c2(i )+ 。。。+cメートル(私)1n−1∑i=1n−1c1(i)+c2(i)+...+cm(i)\frac{1}{n-1}\sum_{i = 1}^{n-1}{c_1(i) + c_2(i) + ... + c_m(i)}c1(私)d1+c2(私)d2+ 。。。cメートル(私)dメートル= ic1(i)d1+c2(i)d2+...cm(i)dm=ic_1(i)d_1 + c_2(i)d_2 + ... c_m(i)d_m = i たとえば、標準のUSDとそのコインの金額をます。ここでは、最小の紙幣は最小のコインの100の価値があります。この通貨を使用して46セントを作るには4コインが必要です。我々は。ただし、コインの額面が場合、3つのコインのみが必要になります:。これらの金種セットのうち、99セントまでの合計を作るためにコインの平均数を最小化するものはどれですか。{ 1 、5 、10 、25 、50 }{1,5,10,25,50}\{1, 5, …

2
xorがゼロになるようにシーケンスに追加するために必要な最小数を見つけるにはどうすればよいですか
自然数のシーケンスを指定すると、xorがゼロになるように、シーケンス内の任意の数に任意の自然数を追加できます。私の目標は、追加された数値の合計を最小化することです。 次の例を検討してください。 ために 1,31,31, 3答えはです。を追加すると、ます。2222221113⊕3=03⊕3=03 \oplus 3=0 以下のために答えは。からおよびからを追加すると、ます。10,4,5,110,4,5,110, 4, 5, 166633310101033355513⊕4⊕8⊕1=013⊕4⊕8⊕1=013 \oplus 4 \oplus 8 \oplus 1 = 0 答えは以来、。4,44,44, 40004⊕4=04⊕4=04 \oplus 4 = 0 シーケンス番号のバイナリ表現に取り組んでみましたが、非常に複雑になりました。この問題を解決する簡単で効率的な方法があるかどうか知りたい。

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