次の入力を受け取り、次の出力を吐き出す効率的なアルゴリズムを設計するには、ヒントが必要です。
入力:それぞれ長さがnの整数AとBの2つのソートされた配列
出力:配列AとBのデカルト積で構成される1つのソートされた配列。
For Example:
Input:
A is 1, 3, 5
B is 4, 8, 10
here n is 3.
Output:
4, 8, 10, 12, 20, 24, 30, 40, 50
これがこの問題を解決するための私の試みです。
1)出力がn ^ 2であるとすると、効率的なアルゴリズムはO(n ^ 2)時間計算量よりも優れた処理を行うことはできません。
2)最初に、単純ですが非効率的なアプローチを試しました。AとBのデカルト積を生成します。これはO(n ^ 2)時間計算量で実行できます。保存する必要があるので、並べ替えを行うことができます。したがって、O(n ^ 2)スペースの複雑さもあります。ここで、入力に仮定を行わずにO(n ^ 2logn)よりもうまく実行できないn^2要素を並べ替えます。
最後に、O(n ^ 2logn)時間とO(n ^ 2)空間複雑度アルゴリズムがあります。
入力配列のソートされた性質を利用していないので、より良いアルゴリズムがあるはずです。