次のような2次元配列を持っています-
[0] = [0、4、9] [1] = [ 2 , 6 , 11 ] [2] = [ 3 、 8 、 13 ] [3] = [ 7 , 12 ]
結果の数値セットが最も近くなるように、各サブ配列から 1 つの要素を選択する必要があります。つまり、セット内の最大数と最小数の差が最小になります。
上記の答えは = になります[ 9 , 6 , 8 , 7 ]。
アルゴリズムを作成しましたが、良いものだとは感じません。時間と空間の複雑さの観点から、これを行うための効率的なアルゴリズムは何でしょうか?
編集 - 私のアルゴリズム(python) -
入力 - 辞書: テーブル{}
OUTPUT - 辞書: low_table{}
#
N = len(テーブル)
テーブルの word_key の場合:
テーブルの初期化[word_key]:
temp_table = copy.copy(テーブル)
del temp_table[単語キー]
per_init = copy.copy(init)
low_table[初期化]=[]
範囲内のアイテムの場合(N-1):
最小値 = 9999
for i in temp_table:
temp_table[i] の数値の場合:
min_val > abs(init-nums) の場合:
min_val = abs(init-nums)
del_num = i
next_num = 数値
low_table[per_init].append(next_num)
init = (init+next_num)/2
デル一時テーブル[デル番号]
最低値 = 99
最低セット = []
low_table の x の場合:
low_table[x].append(x)
low_table[x].sort()
ミニ = low_table[x][-1]-low_table[x][0]
ミニ < 最低値の場合:
最低値 = ミニ
最低セット = 低テーブル[x]
最小セットを出力