具体的な問題ではなく申し訳ないのですが、相談に乗ってください。

3時限空間中に x,y,z共に 0〜100の範囲で点が散らばっています。
(その数はだいたい数万個から数百万個くらい。)
これらの点をa_0,a_1,a_2…a_1000000とします。

その中に複数個の点、p_1,p_2,p_3…を配置します。
(こちらはだいたい300個くらいまで)
まずpの数は先に決めてしまいます(たとえば40個)
a_*のそれぞれの点から、おのおの一番近いP_*を見つけ出し
その距離の二乗和が最小になるような点p群を決定したいのですが
どのような方法でそれを決めることができるでしょう?

また、それをできるようになるためには何を勉強すればいいですか?