ソートされた2つのリストをマージする


14

ソートのマージ

この課題では、マージソートのマージサブルーチンを実装します。具体的には、関数、プログラム、または動詞などを作成し、それぞれが昇順でソートされた2つのリストを取得し、それらを昇順でソートされた1つのリストに結合する必要があります。要件:

-アルゴリズムは、入力のサイズで漸近的に線形の時間を要する必要があります。O(n ^ 2)ソリューションの提供を停止してください。

  • リストをソートしたり、リストをマージしたりできるような組み込み関数を使用することはできません。著者の裁量。
  • コードは、繰り返される要素を処理できる必要があります。
  • 空のリストを心配する必要はありません。

例:

merge([1],[0,2,3,4])
[0,1,2,3,4]

merge([1,5,10,17,19],[2,5,9,11,13,20])
[1, 2, 5, 5, 9, 10, 11, 13, 17, 19, 20]

これはなので、最短のコードが勝つかもしれません!


リスト内で繰り返される要素を処理する必要がありますか、それとも2つのリスト間でのみ処理する必要がありますか?
キースランドール

両方とも言いましょう。アイデアは、これを使用してマージソートを実行できる必要があるということです。
isaacg

入力配列を上書きするのは適切ですか?
skibrianski 14

3
アルゴリズムをどのように解釈するは、漸近的に線形の時間を要するに違いない。アルゴリズムには時間がかかりませんが、実装には時間がかかります。Golfscriptの回答の実行時間はRubyインタープリターでO(怖い)ですが、Online Golfscript Testerの動作ははるかに良く、実際には線形である可能性があります(ただし、ソースコードなしで実際に伝える方法はありません)。私の要点はb=a;b=b.length、配列全体を複製するa(すべての要素に対して実行するとO(n ^ 2)時間になる)か、配列への参照のみを複製する(O(n)時間)ことです。どれが重要ですか?
デニス14

1
このような場合、最善を尽くしてそれを把握することをお勧めしますが、正直に言うことができない場合は、2番目の代替案のように、物事がうまく機能すると仮定できます。言語に標準のインタープリターがない場合は、インタープリターが適切に機能すると想定できます。
isaacg 14

回答:


8

レブム(35 32文字)

u[iG^aNXa[rvA]apGtkFaM?fA]apGscA

テスト

>> rebmu/args [u[iG^aNXa[rvA]apGtkFaM?fA]apGscA] [[1 5 10 17 19] [2 5 9 11 13 20]] 
== [1 2 5 5 9 10 11 13 17 19 20]

>> rebmu/args [u[iG^aNXa[rvA]apGtkFaM?fA]apGscA] [[2 5 9 11 13 20] [1 5 10 17 19]] 
== [1 2 5 5 9 10 11 13 17 19 20]

RebmuはRebolの方言で、簡潔さを必要とする状況で通常のコードを「マッシング」することを許可します。マッシュされていないコードは、次のように機能します。

u [                     ; until
    i g^ a nx a [       ; if greater? args next args
       rv a             ; reverse args
    ]                   ; (we want the block containing the next value first)

    ap g tk f a         ; append output take first args
    m? f a              ; empty? first args
]                       ; (first block is now empty)

ap g sc a               ; append output second args
                        ; (add the remainder of the second)

untilブロックは最大で入力の長さだけループされる(そして、ブロック自体ではなく、入力ブロックのコンテナーの順序のみを切り替える)ため、これはO(n)要件を満たすと思いますreverse。使用することtakeはおそらく自由ですが、それでも小さな効率の低下です。

Rebol(83 75文字)

ほんの少し異なります。Rebolでは、パスはfirstまたはよりも短い表現ですseconda2つのブロックを含む入力ブロックです。

until[if a/2/1 < a/1/1[reverse a]append o:[]take a/1 tail? a/1]append o a/2

5

OPのソリューション:

ハスケル49 44 40

k@(p:r)%l@(q:s)|p>=q=q:k%s|0<1=l%k
a%_=a

パイソン131 105 101 99 93

@Evpokのおかげで:

f=lambda u,v:v and(v[-1]<u[-1]and f(v,u)or[b.append(a)for a,b in[(v.pop(),f(u,v))]]and b)or u

1
a%b=a++b空のリストを処理するために、メインパターンマッチングの後に書き込むことができます。これにより、いくつかの文字が削除されます。
swish 14

最初のリストのコンテンツが最初になくなった場合、Haskellソリューションは失敗しませんか?
ジョンドヴォルザーク14

最初の関数を見ると、短縮されたリストを2番目の引数として、長くされたリストを最初の引数として関数を再帰的に呼び出すか、引数を交換します。したがって、最初の引数が短くなることはありません。OPによって空からは開始されないため、空になることはありません。
isaacg 14

4

パイソン(79)

from itertools import*
def m(*a):
 while any(a):yield min(compress(a,a)).pop(0)

Python(95、ジェネレーターを返すことが許可されていない場合)

from itertools import*
def m(*a):
 r=[]
 while any(a):r+=[min(compress(a,a)).pop(0)]
 return r

Itertoolsは、世間のあらゆる問題の解決策です。

ボーナス:これらの2つは任意の数のリストで機能し、空のリストを心配します(たとえば、2つの空のリストを取得して空のリストを返すか、1つの空のリストと1つの空でないリストを取得します。そして、それらは空でないものを返します。2つの非譲りものの追加された機能:引数なしで実行され、空のリストを返します。

ゴルフをしていない:

from itertools import *  # Import all items from itertools
def m(*a):               # Define the function m, that takes any number of arguments, 
                         #  and stores those arguments in list a
    r=[]                 # Create an empty list r                         
    while any(a):        # While any element in a returns True as value:
        b=compress(a,a)  # Remove any element from a that isn't True (empty lists)
                         #  The example in the official documentation is this one:
                         #  compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F
        c=min(b)         # Sort the lists by first value, and take the first one of these.
        d=c.pop(0)       # Take the first element from c
        r.append(d)      # Append this first element to r
    return r             # Gives back r

ジェネレーターのないソリューションでは、r+=[...]代わりにr.append(...)(毎回4文字を保存)の代わりに使用します
hlt 14

私はこれで違反を意味するわけではありませんが、あなたの答えがゴルフのために特別に修正された単なる別の言語のコードを含んでいるなら、それを支持します。それは残念です、本当のpythonの答えは良いです。
地下

それらを別の投稿に分割する場合は、Pythonの投稿に投票します。
地下

4
@undergroundmonorail GolfScriptのすべての回答に投票しますか?
Evpok 14

1
@Evpokあなたがそれについて言及したので、メタでそれを投げて、彼らがそこに何を言わなければならないかを見るかもしれません。
ɐɔıʇǝɥʇuʎs

3

C-75

これは、のNULL終端配列で動作しますがint *、適切な比較関数を**b < **a(たとえばstrcmp(*b, *a) < 0)に置き換えることで、他の型へのポインターでも同様に機能します。

void m(int**a,int**b,int**c){while(*a||*b)*c++=!*a||*b&&**b<**a?*b++:*a++;}

ゴルフをしていない:

void merge(int **a, int **b, int **c)
{
    while(*a || *b)
        *c++ = !*a || *b && **b < **a
            ? *b++
            : *a++;
}

3

Golfscript、29 27 30 29 26バイト

~{.0=@.0=@<{}{\}if(@@.}do;~]p

または

~{.0=@.0=@>{\}*(@@.}do;~]p

使い方

コマンド

golfscript merge.gs <<< '[2 3] [1 4]'

次のように処理されます。

~            # Interpret the input string.
             #
             # STACK: [2 3] [1 4]
{            #
    .@=0.@=0 # Duplicate the two topmost arrays of the stack and extract their first 
             # elements. This reverses the original order of the first copy.
             #
             # STACK: [1 4] [2 3] 2 1
             #
    >        # Check if the respective first elements of the arrays are ordered.
             #
             # STACK: [1 4] [2 3] 1
             #
    {\}*     # If they are not, swap the arrays. This brings the array with the smallest
             # element to the top of the stack.
             #
             # STACK: [2 3] [1 4]
             #
    (@@      # Shift the first element of the array on top of the stack and rotate it
             # behind the arrays.
             #
             # STACK: 1 [2 3] [4]
             #
    .        # Duplicate the topmost array.
             #
             # STACK: 1 [2 3] [4] [4]
             #
}do          # Repeat this process if the array is non-empty.
             #
             # STACK: 1 [2 3] [4] -> 1 2 [4] [3] -> 1 2 3 [4] []
             #
;~           # Delete the empty array from the stack and dump the non-empty array.
             #
             # STACK: 1 2 3 4
             #
]p           # Combine all elements on the stack into a single array, the to a string and
             # print.

出力は次のとおりです。

[1 2 3 4]

スタック内の配列を複製すると、O(n ^ 2)になりますか?
スウィッシュ

@swish:私はコンピューター科学者ではありませんが、実装に依存すると思います。インタープリターが実際に配列全体を複製する場合、私はそれを推測します。
デニス14

以前のバージョンは、非常に類似した配列([1 1 1 ... 2]およびなど[1 1 1 ... 3])のO(n ^ 2)でした。この場合、(最初の要素ではなく)配列の比較が非常に遅いためです。
デニス14

新しいバージョンで行われる配列操作は、スタックでの複製、スワッピング、およびローテーションのみです。複製された配列は、単一の要素を抽出し、空でないかどうかの配列をテストするためにのみ使用されるため(Golfscriptの両方の破壊的な操作)、上記のコードはO(n)時間で実行できます(参照を複製、交換、回転させる配列)。実際のパフォーマンスはインタープリターによって異なります。
デニス14

2

J- 42 33

ここからの修正版+ @algorithmsharkのコメント

k=:(m}.),~0{]
m=:k~`k@.(>&{.) ::,

k右の配列の先頭を、両方の配列のマージされた末尾に追加します。k~同じですが、配列が反転します。(>&{.)ヘッドを比較しています。配列の1つが空の場合、コードはエラーをスローします,。その場合、単に連結を返します。


以来、私はそれを想定しています/:~ a,b禁断の答えは(と一緒にいる[:/:~,)、あなたのことを含まない最短の答えのためにしている撮影/:、右?
デーン14

私は、質問が「空のリストを心配しないでください」と述べていることを指摘します。
デーン14

@Dane再帰を停止するために必要な空のテスト。
スウィッシュ

m=:k~`k@.(>&{.)`,@.(0=*&#)2文字節約します。
algorithmshark 14

実際には、33文字まで全体を降りることができますk=:(m}.),~0{]m=:k~`k@.(>&{.) ::,。私たちは、使用0{リストが空の場合にエラーをスローし、その後でそのエラーと終了をキャッチします,
algorithmshark 14

2

JavaScript(ES6)、69 79バイト

f=(a,b,c=[])=>(x=a[0]<b[0]?a:b).length?f(a,b,c.concat(x.shift())):c.concat(a,b)

使い方

f = (a, b, c = []) =>          // `f' is a function that takes arguments `a', `b' and `c' -
                               // `c' defaults to `[]' - which returns the following
                               // expression:
                               //
 (x = a[0] < b[0] ? a : b)     // Store the array among `a' and `b' with the smaller first 
                               // element in `x'.
                               //
 .length ?                     // If it's non-empty,
                               //
  f(a, b, c.concat(x.shift())) // append the first element of array `x' to array `c' and run
                               // `f' again;
                               //
  : c.concat(a,b)              // otherwise, append the arrays `a' and `b' to `c'.
                               //
)

配列を比較すると<、それは文字列の比較を行うように、オペレータは有効ではありません:f([123, 456, 789], [1, 2, 3, 4, 5]) => [1, 123, 2, 3, 4, 456, 5, 789]
nderscore

@nderscore:そうです。配列全体を比較するとO(n)にならない場合があるため、とにかく機能しませんでした。空でないテストでも同じことが当てはまるようです。空ではないテストでは、配列全体を文字列に変換する必要があります。
デニス14

ええ、配列->文字列型変換の大物が何なのかわかりません。
nderscore 14

1
配列を連結[]してから文字列に変換するには、O(n)時間かかります。配列のn個の要素すべてに対して1回行うと、O(n ^ 2)時間かかります。
デニス14

理にかなっています。とった。
アンダースコア14

2

パイソン(63)(69)(71)

def m(a,b):
 if a[0]>b[0]:a,b=b,a
 return[a.pop(0)]+(m(a,b)if a else b)

他の回答の実行時間に関するOPのコメントを見る前にこれを書いたので、これはアルゴリズムではなく実装ではなくO(n)である別のソリューションです。


O(1)として配列の前面から抽出されたアルゴリズムは何ですか?リスト比較にO(1)を使用するアルゴリズムはどれですか?また、... if ... else ...を... and ...または...に変更することにより、さらにゴルフをすることができます
isaacg 14

@isaacgシュート、リストの比較をO(n)にする繰り返しを忘れていました。そこで、さらに6文字の最適化を行いました。リンクリストのO(1)で先頭から抽出および追加できます。私はあなたがどのように作ることができるかわかりません...そして...または...値を返すことでうまく遊ぶ
xnor 14

OK、どうやって...そして...または...するのかがわかりましたが、必要な括弧が原因で文字が保存されません。return[a.pop(0)]+(a and m(a,b)or b)
xnor 14

@isaacg:O(1)で配列の先頭を抽出するには、2番目の要素を指すように配列ポインタを増やし、最初の要素が消費したメモリを解放します。
Wrzlprmft 14

@Wrzlprmft配列の両方の要素がブール値に関係なく評価されるため、配列のトリックを動作させることができませんでした。これは、aが空のリストである場合にエラーをスローします。「遅延配列」を作成する簡単な方法はありますか?
XNOR

2

Haskell、35バイト

a#b@(c:d)|a<[c]=b#a|0<1=c:a#d
a#_=a

Haskell、30バイト(非競合)

この非競合バージョンはab要素がばらばらの場合にのみ線形ランタイムを保証します。それ以外の場合は引き続き正常に実行されますが、2次時間を使用する場合があります。

a#b|a<b=b#a|c:d<-b=c:a#d
a#_=a

2

PHP 91 98 91バイト

編集#1:空に$bは、中括弧(+7)に追加条件が必要です。
編集#2:マイナーなゴルフ
編集#3:2番目のバージョンを追加

かなり簡単です。最も良い部分は、内部の三元array_shift
です(curlysなしで試してみると失敗します)

function m($a,$b){for($c=[];$a|$b;)$c[]=array_shift(${$a&(!$b|$a[0]<$b[0])?a:b});return$c;}

または

function m($a,$b){for($c=[];$a|$b;)$c[]=array_shift(${$a?!$b|$a[0]<$b[0]?a:b:b});return$c;}

食べない

function m($a,$b)
{
    $c=[];
    while($a||$b)
    {
        $c[] = array_shift(${
            $a&&(!$b||$a[0]<$b[0])
                ?a
                :b
        });
#       echo '<br>', outA($a), ' / ', outA($b) , ' -> ', outA($c);
    }
    return $c;
}

テスト

$cases = array (
    [1],[0,2,3,4], [0,1,2,3,4],
    [1,5,10,17,19],[2,5,9,11,13,20], [1, 2, 5, 5, 9, 10, 11, 13, 17, 19, 20],
    [1,2,3],[], [1,2,3],
    [],[4,5,6], [4,5,6],
);
function outA($a) { return '['. implode(',',$a). ']'; }
echo '<table border=1><tr><th>A</th><th>B</th><th>expected</th><th>actual result</th></tr>';
while ($cases)
{
    $a = array_shift($cases);
    $b = array_shift($cases);
#   echo '<hr>', outA($a), ' / ', outA($b) , ' -> ', outA($c);
    $expect = array_shift($cases);
    $result=m($a,$b);
    echo '<tr><td>',outA($a),'</td><td>',outA($b),'</td><td>', outA($expect), '</td><td>', outA($result),'</td></tr>';
}
echo '</table>';

なぜ単純ではないのかを理解できません$a&(!$b|$a[0]<$b[0])?$a:$bでした${$a&(!$b|$a[0]<$b[0])?a:b}
ヨルクヒュルサーマン

1
@JörgHülsermann array_shiftパラメーターは参照により使用されます。変数でなければなりません。式は機能しません。
タイタス


1

JavaScript-133

function m(a,b){c=[];for(i=j=0;i<a.length&j<b.length;)c.push(a[i]<b[j]?a[i++]:b[j++]);return c.concat(a.slice(i)).concat(b.slice(j))}

OPと同じ種類のアプローチ。


1

perl、87文字/ perl 5.14、78 + 1 = 79文字

この実装は、入力配列参照を破壊します。それ以外は、非常に簡単です。両方の配列に何かがありますが、2つの配列のうち低い方の配列にシフトします。次に、残りのビットと結合されたマージされたビットを返します(@ $ xまたは@ $ yのいずれかのみが残ります)。ストレートperl5、87文字:

sub M{($x,$y,@o)=@_;push@o,$$x[0]>$$y[0]?shift@$y:shift@$x while@$x&&@$y;@o,@$x,@$y}

perl 5.14.0とその新しい配列参照シフトの使用:78文字+ 1文字のペナルティ= 79文字:

sub M{($x,$y,@o)=@_;push@o,shift($$x[0]>$$y[0]?$y:$x)while@$x&&@$y;@o,@$x,@$y}

*代わりに&&バイトを保存します。さらにもっとsub M{map{shift(!@$x+@$y*($$y[0]<$$x[0])?$y:$x)}map@$_,($x,$y)=@_}
user2846289 14

@VadimR、すごい。よくやった。必要に応じて、それを投稿してください-配列をプッシュするのではなく、ダブルマップトリックを行うことは考えられませんでした。
skibrianski 14

1

Java:144

これは非常に簡単です。2つの配列を受け取り、1つ、マージされたバージョン、ゴルフ、コンパイルラッパーなしを返す関数:

int[]m(int[]a,int[]b){int A=a.length,B=b.length,i,j;int[]c=new int[A+B];for(i=j=0;i+j<A+B;c[i+j]=j==B||i<A&&a[i]<b[j]?a[i++]:b[j++]);return c;}

Ungolfed(コンパイル可能および実行可能ラッパー付き):

class M{
    public static void main(String[]args){
        int[]a=new int[args[0].split(",").length];
        int i=0;
        for(String arg:args[0].split(","))
            a[i++]=Integer.valueOf(arg);
        int[]b=new int[args[1].split(",").length];
        int j=0;
        for(String arg:args[1].split(","))
            b[j++]=Integer.valueOf(arg);
        int[]c=(new M()).m(a,b);
        for(int d:c)
            System.out.printf(" %d",d);
        System.out.println();
    }
    int[]m(int[]a,int[]b){
        int A=a.length,B=b.length,i,j;
        int[]c=new int[A+B];
        for(i=j=0;i+j<A+B;c[i+j]=j==B||i<A&&a[i]<b[j]?a[i++]:b[j++]);
        return c;
    }
}

実行例:

$ javac M.java
$ java M 10,11,12 0,1,2,20,30
 0 1 2 10 11 12 20 30
$ java M 10,11,12,25,26 0,1,2,20,30
 0 1 2 10 11 12 20 25 26 30

短縮するためのヒントをいただければ幸いです。


1

Scala、97バイト

O(n)を使用した再帰的ソリューション。コードを短縮するために、2つの交換可能なパラメーター、つまりf(a、b)がf(b、a)を呼び出すことにより、操作が実行される場合があります。

type L=List[Int];def f(a:L,b:L):L=if(a==Nil)b else if(a(0)<=b(0))a(0)::f(a.drop(1),b) else f(b,a)

ゴルフをしていない:

type L=List[Int]

def f(a:L, b:L) : L =
  if (a == Nil)
    b 
  else 
    if (a(0) <= b(0))
      a(0) :: f(a.drop(1), b) 
    else
      f(b,a)

aが空ではないがbが空の場合の例外
ダンオシポフ14年

1

APL(32)

{⍺⍵∊⍨⊂⍬:⍺,⍵⋄g[⍋g←⊃¨⍺⍵],⊃∇/1↓¨⍺⍵}

説明:

{⍺⍵∊⍨⊂⍬                               if one or both of the arrays are empty
        :⍺,⍵                           then return the concatenation of the arrays
             ⋄g[⍋g←⊃¨⍺⍵]              otherwise return the sorted first elements of both arrays
                          ,⊃∇/        followed by the result of running the function with
                               1↓¨⍺⍵}  both arrays minus their first element

1

LISP、117バイト

アルゴリズムはn + 1反復で終了します。ここnで、は入力の最短リストの長さです。

(defun o(a b)(let((c(car a))(d(car b)))(if(null a)b(if(null b)a(if(< c d)(cons c(o(cdr a)b))(cons d(o a(cdr b))))))))


0

Python – 69バイト

def m(A,B):
    C=[]
    while A and B:C+=[[A,B][A>B].pop(0)]
    return C+A+B

入力と出力の順序が降順の場合、これは61バイトに短縮できます

def m(A,B):
    C=[]
    while A+B:C+=[[A,B][A<B].pop(0)]
    return C

ジェネレーターが許可されている場合、さらに45バイトまで:

def m(A,B):
    while A+B:yield[A,B][A<B].pop(0)

これは間違いなくO(n)ではありません。.pop(0)と+ =は、どちらもO(n)回行うO(n)操作です。
isaacg

これまでリストがPythonのリストとして実装されておらず、それでもpop(0)O(1)+=で実装でき、少なくともO(n)よりも適切に実装できることは知りませんでした(リンクを参照)。ちなみに、あなたのソリューションは私のものと同じくらい頻繁に使用します+=(つまり、)。とにかく、それは実装に関する質問です(私の知る限り)ので、リストがリストとして実装される(架空の)Python実装では、私の関数はO(n)です。最後に、あなたの質問にはアルゴリズムがO(n)である必要があり、私の場合はそうです。appendextend
Wrzlprmft 14

実際、appendとextendは、Pythonでは+ =とは異なる方法で実装されています。+ =は新しいリストを作成し、.appendと.extendは既存のリストを変更します。
isaacg 14

0

Perl 6:53文字

sub M(\a,\b){{shift a[0]>b[0]??b!!a}...{a^b},a[],b[]}

aまたはのいずれかからシフトbまで、より小さな値を有するaXORは、ba^b)が真です。次に、残っているものを返し[]、配列をリストにフラット化()します(a[],b[])。

配列の先頭からのシフトがO(n)であると仮定すると、最悪の場合は2つの比較と要素ごとの1つのシフトであるため、アルゴリズムはO(n)です。


0

JavaScript(ES5)90 86 90バイト

function f(a,b){for(o=[];(x=a[0]<b[0]?a:b).length;)o.push(x.shift());return o.concat(a,b)}

編集:(90-> 86)三項をforループ条件に移動しました。デニスから盗まれたアイデア。

edit:(86-> 90)O(n)要件に違反するため、ArrayをStringキャストに削除しました。


0

Mathematica、137 135

m[a_,b_]:=(l=a;Do[Do[If[b[[f]]<=l[[s]],(l=Insert[l,b[[f]],s];Break[]),If[s==Length@l,l=l~Append~b[[f]]]],{s,Length@l}],{f,Length@b}];l)

入力:

m[{2,2,4,6,7,11},{1,2,3,3,3,3,7}]

出力:

{1, 2, 2, 2, 3, 3, 3, 3, 4, 6, 7, 7, 11}

ゴルフをしていない:

mergeList[a_, b_] := (
    list = a;
    Do[
        Do[(
            If[
                b[[f]] <= list[[s]],
                (list = Insert[list, b[[f]], s]; Break[]),
                If[
                    s == Length@list,
                    list = list~Append~b[[f]]
                ]
        ]),
        {s, Length@list}
    ],
    {f, Length@b}
    ];
    list
)

おそらくもっと良くできたでしょう。


m[a:{x___,y_},b:{___,z_}]:=If[y<z,b~m~a,{x}~m~b~Join~{y}];{}~m~b_=b;
alephalpha

0

R、80

Scalaや他の言語と同じソリューション。x [-1]がO(1)であるかどうかはよくわかりません。

f=function(a,b)if(length(a)){if(a[1]<=b[1])c(a[1],f(a[-1],b))else f(b,a)}else b

0

Mathematica、104バイト

Reap[{m,n}=Length/@{##};i=k=1;Do[If[k>n||TrueQ[#[[i]]<#2[[k]]],Sow@#[[i++]],Sow@#2[[k++]]],n+m]][[2,1]]&

匿名関数。2つの入力リストの長さを変数mとに格納しn、その後、DoループSowの、リストのカウンター(i最初のリストk、2番目のリスト)を1ずつ増やします。カウンターの1つがリストの長さを超える場合、Ifステートメントは常にSow他のリストの要素になります。n+m操作後、すべての要素が処理されました。Reapまたは[[2,1]]、その出力の一部は、Sownの順序の要素のリストです。

私は内部のことはわかりません(リストの一部にアクセスするかどうかO(1))が、入力リストの長さに関して、タイミングはマシン上で非常に線形に見えました。

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