次のような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] 最小セットを出力