まず、表があります。
複数のメンバーをもつオブジェクトがいくつかあります。そしてそのオブジェクトは何セットかあります。
表の中にオブジェクトを入れるのですが、表を横に見てなるべくメンバーのかぶりが少なくなるように入れたいのです。
具体的には
・a×bのマスの表
・次のようなオブジェクト郡
オブジェクト (メンバー)
A (a b c d)
B (e f b g h i)
C (a b c j i)
・
・
・
このオブジェクトが全部でx個あり、それがyセットあります。
つまり、
a×b >= x×y (xとyの間は算術記号の「かける」、です。分かりにくくてすいません)
となり、表のすべてのマスが必ずしもうまるとは限りません。
a=18
b=18
x=70
y=4
前後を想定しています。
この説明で分かりますでしょうか??
このようなことを行うプログラムを作ろうと思うのですが、なかなかいい方法が思いつきません。今考えているやり方ではすごく時間がかかる、というか終わりません。
私は趣味でプログラムをしているので、これがどのくらいのレベル(難しさ)のプログラムなのかよく分かりません。
ちなみに私はプログラムを覚え始めて1年くらいです。
質問は以下の3点です。
・このプログラムの難しさを教えてください
・このプログラムを仕事でやるとしたら、どの程度の仕事なのでしょうか(どのくらいの期間で作ったらいくらくらいの仕事なのかということです。こんなの簡単すぎて報酬払う人いない、といった回答でも結構です)
・このプログラムの要求を満たす、いいアルゴリズムがあったら教えてください
最初の2点は完全に個人的な興味です。
すごく分かりにくい文章になってしまいすいません。
よろしくお願いします。
MATLABでプログラミングを行っているのですが、forを使い
for trt=1:rety(1);
xt2(trt,:)=xt1(trt):xt1(trt)+(x-1);
yt2(trt,:)=yt1(trt):yt1(trt)+(x-1);
end
for t3t=1:re/ysuu
torie(:,:,t33(:,t3t))=saweq(xt2(gjir1(trt),:),yt2(gjir1(trt),:),:);
end
この様な変数を作製しています。
上のアルゴリズムは a:b (a=1:10) (b=a+5) で複数の位置データを記録する物で、
下のアルゴリズムは画像データを重ね合わせる物です。
これらのアルゴリズムでforを使わずにより高速化できる方法があれば連絡をお願いします。
これって、Delphiのバグですか?特性ですか?
procedure TForm1.Button1Click(Sender: TObject);
begin
test();
end;
//--------------------------
procedure TForm1.test();
var
k,x:integer;
begin
paintbox1.Canvas.pen.Color:=clBlack ;
x:=0;
for k:=1 to 3 do
begin
paintbox1.Canvas.moveto(x,0);
paintbox1.Canvas.lineto(x,paintbox1.Height);
x:=x+2;
end;
end;
forループ内にブレークポイントを付けて「k」の値の変化を見ると、3,2,1と逆順になります。
「x:=x+2」を「x:=x+k」に変更すると、1,2,3と普通の順になります。
なぜ、こうなるのか?
対処法はありますか?
Delphi Ver6・ターボDelphi どちらも同じ状況です。
いつも参考にさせて頂いております。
現在、VB.NET(VS2003/.NET Framework1.1)を使用して画像の二値化処理のプログラムを作成しております。
処理する事は簡単で、ビットマップファイルのRED要素を取り出し、閾値内なら白に変換して二値化するプログラムです。
以下がそのプログラムです。
-----
'変換する前の画像をファイルから読み込む
Dim img1 As System.Drawing.Bitmap = New System.Drawing.Bitmap(filepath)
'変換後のビットマップ
Dim img2 As System.Drawing.Bitmap = New System.Drawing.Bitmap(img1.Width, img2.Height)
'二値化処理
Dim b As Byte
For i = 0 To img1.Width - 1
For j = 0 To img1.Height - 1
b = img1.GetPixel(i, j).R
If b >= 閾値下限 And b <= 閾値上限 Then
img2.SetPixel(i, j, Color.White)
Else
img2.SetPixel(i, j, Color.Black)
End If
Next
Next
PictureBox1.Image = img
-----
これで処理は出来るのですが、ファイルが大きい場合は、非常に時間が掛かってしまいます。処理速度はCPUの速度にもよると思うのですが、できるだけ高速化したのですが、何かよい知恵があればご教授頂けると助かります。よろしくお願いいたします。
XP Pro SP2/VS2003/VB.NET/.NET Framework1.1