[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 01/02 08:46 / Filesize : 251 KB / Number-of Response : 871
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

計算アルゴリズム【U】



1 名前:デフォルトの名無しさん mailto:sage [2005/10/15(土) 20:42:23 ]
前スレ創設者 FeaturesOfTheGod ◆UdoWOLrsDM の言葉

>プログラム板の皆さん、こんにちは。
>無謀にもこんなスレを立ててみました。
>四則演算、初等関数、その他の関数の関数値を求めるアルゴリズムについての話をしましょう。
>人間にとって計算しやすい方法についても別途語ることにしましょう。

前スレ↓
pc8.2ch.net/test/read.cgi/tech/1090227743/

82 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 17:45:14 ]
プログラミングの前に数学勉強しろよ

83 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 17:47:37 ]
>>81 方向ベクトル求めれば直交する方向ベクトルが自明に定まるのでそれを使う

84 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 22:01:41 ]
>>81
>>76のページに 2点の中点を通りそれに直行する直線 というのがある

また、
> 3)点(X1,Y1)に一番近い点 {c(cX1-sY1)-s*d,-s(cX1-sY1)-c*d}
を使えば、その点と結べば垂線だ


85 名前:デフォルトの名無しさん [2005/10/20(木) 23:56:47 ]
>>81
3角定規をあてる。

86 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 01:16:51 ]
寧ろコンパスかと。

87 名前:デフォルトの名無しさん [2005/10/21(金) 10:33:10 ]
>>85
代数学では、3角定規は平行線を描く以外に使っちゃダメだろ習わなかったか?
そもそもアレは90゚なのか?

88 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 10:36:15 ]
>>87 ハァ? 代数学?

89 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 11:20:04 ]
>>62 だと、何を聞きたいのか判らん。 >>79

90 名前:デフォルトの名無しさん mailto:sage [2005/10/22(土) 15:26:24 ]
三点((x1,y1), (x2, y2), (x3,y3))を通る円の方程式が欲しい場合は、
4行4列の行列
(x**2+y**2,x,y,1)
(x1**2+y2**2,x2,y2,1)
(x2**2+y2**2,x2,y2,1)
(x3**2+y3**2,x3,y3,1)
の行列式 = 0 と置けば出るよな。



91 名前:デフォルトの名無しさん mailto:sage [2005/10/23(日) 10:35:15 ]
>>90
証明のヒントを下さい。

92 名前:90 mailto:sage [2005/10/23(日) 13:24:43 ]
(x0**2+y0**2,x0,y0,1) (1)
(x1**2+y2**2,x1,y1,1) (a)
(x2**2+y2**2,x2,y2,1) (b) = 0
(x3**2+y3**2,x3,y3,1) (c)

っていう連立方程式が a, b, c について解けるなら
x^2 + y^2 + ax + by + c = 0
が求める円の方程式になるよね。
解が存在するためには rank が 3 以下じゃなくちゃいけないので
行列式 = 0 が出てくるという寸法。

三点が同一直線上にないっていうことも別途確認する必要もあるね。

93 名前:デフォルトの名無しさん mailto:sage [2005/10/23(日) 15:32:04 ]
>>92
ありがとうございました。

94 名前:デフォルトの名無しさん mailto:sage [2005/10/23(日) 18:48:38 ]
ゼロと比較する時は要注意だ。

95 名前:デフォルトの名無しさん mailto:sage [2005/10/23(日) 19:07:39 ]
>>90
複素平面上だと
Im((z1-z3)/(z2-z3)*(z2-z4)/(z1-z4))=0

96 名前:デフォルトの名無しさん [2005/10/25(火) 22:00:04 ]

アルゴリズムC・新版―基礎・データ構造・整列・探索
R. セジウィック (著), Robert Sedgewick (原著), 野下 浩平 (翻訳), 佐藤 創 (翻訳), 星 守 (翻訳), 田口 東 (翻訳)

この本って買い?
内容とか翻訳の質とか教えてください。



97 名前:デフォルトの名無しさん [2005/10/25(火) 23:15:47 ]
買いです。
Cのコーディングスタイルは疑問なんで、丸写ししたい人向けじゃないです。

98 名前:デフォルトの名無しさん mailto:sage [2005/10/26(水) 00:05:01 ]
新版はコードましになってると聞いたけど不明。

99 名前:デフォルトの名無しさん [2005/10/26(水) 16:52:05 ]
平面座標に座標配列で定義された閉じたポリゴンがあるとして、
そこにある座標がポリゴン内か外か、どういうアルゴリズムになりますか?

100 名前:デフォルトの名無しさん mailto:sage [2005/10/26(水) 17:05:56 ]
なんで >>76 のリンク先に丁度ある話題ばかりでるのだろう?
どっかの学校があそこみて課題出してる?



101 名前:デフォルトの名無しさん mailto:sage [2005/10/26(水) 22:30:36 ]
幾何と代数は複素数によって等価であることが結びつけられた。

102 名前:デフォルトの名無しさん mailto:sage [2005/10/26(水) 22:53:40 ]
>>101
何言ってる不明

103 名前:デフォルトの名無しさん mailto:sage [2005/10/26(水) 22:55:46 ]
>>101
工エエェェ(´д`)ェェエエ工

104 名前:デフォルトの名無しさん mailto:sage [2005/10/26(水) 22:58:41 ]
>>101
ちなみに聞くけど複素数が何か知っていってるの?

105 名前:デフォルトの名無しさん mailto:sage [2005/10/26(水) 23:04:04 ]
i = √(-1)
とか言うなよ?
言ったら笑っちゃうよ?

106 名前:デフォルトの名無しさん [2005/10/26(水) 23:21:58 ]
>>101
えっと、幾何と代数の意味はわかってるよね?

107 名前:デフォルトの名無しさん mailto:sage [2005/10/27(木) 02:21:08 ]
>99
点ABCから成る三角形の内側に、点Pが存在しているか?
いくつか方法あるけど、
内積から以下の角度を求めて、成立していれば内側
( ∠ABC > ∠ABP ) && ( ∠BCA > ∠BCP )

あとは外積から法線の向きで判別する方法とかもある。

108 名前:デフォルトの名無しさん mailto:sage [2005/10/27(木) 06:23:44 ]
 点 q を指定し 点p配列で指定した多角形の内側かどうか?
 の次は、  ttp://www.tensyo.com/urame/prog/linealgo.htm
 ・ 線分の上にあるか?
 ・ 線分が交わるか?
 ・ 線分と点の距離
 ・ 円を水平線で塗り潰す
 ・ 最小2乗法による直線推定
 ・ 最小2乗法による円弧推定
 ・ 面積/重心
 ・ スプライン


109 名前:デフォルトの名無しさん mailto:sage [2005/10/27(木) 09:30:20 ]
ヲォ, サンクス >>107 >>108

結構ムズいんですね。


110 名前:デフォルトの名無しさん mailto:sage [2005/10/27(木) 12:27:06 ]
>>109
コードは20行にもならないだろう



111 名前:ハーピィ mailto:sage [2005/10/28(金) 14:05:04 ]
E・∇・ヨノシ <111ゲット♫

112 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 16:26:06 ]
あるn次元ベクトルxとある対称行列A(nxn)の二次形式 x'Ax を
O(n)で計算できる夢のようなアルゴリズムはありますか?

113 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 17:17:52 ]
ありますよ。
でもここでは余白が狭すぎて書けません。ごめんなさい。

114 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 17:33:49 ]
>>112
存在しない.
x = (x_1, ..., x_n) としたとき,Σ_{i,j} (x_i x_j) という二次形式がありうるが,
これは項数が n^2 なので,それより小さなオーダーにはできない.

115 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 17:53:58 ]
ご返答ありがとうございます。

では一歩譲ってn^2オーダーだとしても、その中でなんとか
効率よく計算量を減らす方法などはありますでしょうか?

Aが対称行列なので、行列の半分だけを使って2倍しながら計算、
それにxi*a_iiの二乗和を加えるという方法で、なんとか半分程度に
減らすことはできたのですが、もはや削減もここまででしょうか?

116 名前:デフォルトの名無しさん mailto:sage [2005/11/02(水) 18:48:19 ]
FFTみたいのが使えたらいいのにね・・・・って事?

117 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 00:53:28 ]
てゆうか、最低限やらなあかん計算量ってのがある罠。
それ以下にはできんでしょ。

118 名前:112 mailto:sage [2005/11/03(木) 01:46:51 ]
>>116
FFTのアルゴリズムを理解してないんでなんとも言えませんが、
nが2の累乗みたいな特定の条件下のみで最適化可能というものでも
もしあればありがたいと思いましたが。。

>>117
ごもっともです。
必要なデータを読み出さずに計算なんて神の所業ですよね。

自分の書いたC言語のプログラムが、二次形式を計算する箇所の
for文二重ループたったひとつのせいでむやみやたらと遅くなったもので。。
だいたいnが数百〜数千くらいなんで当たり前っちゃ当たり前なんですが。

二次形式をn*100回以上繰り返し計算するわけですが、今回の場合、
Aはいつも定数で、xは要素のどれか一つだけが更新されているという
条件があって、もう少し計算が省けそうなのでがんばってみます。

119 名前:112 mailto:sage [2005/11/03(木) 01:51:08 ]
間違いました。訂正です。

> xは要素のどれか一つだけが更新されているという条件

どれかひとつじゃなくてxの要素はまるごとそっくり
入れ替わっている必要がありました。失礼。

120 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 06:53:34 ]
そもそも計算しないで済ませる



121 名前:120 mailto:sage [2005/11/03(木) 07:16:43 ]
途中で書き込んじゃった.で,どんな問題解いてるの?

行列処理だったら本質的に O(N^2) は避けられないので,それが許せないなら問題に合わせた解法を用意するしかない.
例えば A が問題設定の時点でわかってるならそれを対角化するような座標を選んで O(N) の反復に落とすとか.

122 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 08:08:58 ]
>112
1.SIMD命令で最適化する
2.ループを展開する

123 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 10:23:41 ]
>>122 >>122 >>122 >>122 >>122 >>122 >>122 >>122

124 名前:デフォルトの名無しさん [2005/11/03(木) 15:59:19 ]
数学板で質問させていただいたのですが、ム板で伺ったらよいアドバイスが聞けるのではとの誘導を受けたので質問させていただきます。

直方体の空間をm*n*n個の直方体にさいの目状に分割したとします。で一個一個の直方体をセルとします。
例えば一つのセルの大きさを1とすると、
セル(i ,j ,k)は八つの点(i, j, k),(i+1, j, k),(i, j+1, k), (i, j+1, k), (i, j, k+1),, (i, j+1, k+1), (i+1, j, k+1), (i+1, j+1, k+1)
を頂点とする直方体です。(i, j, k = 0, 1, 2, 3...)

この空間内に単位方向ベクトルA(u, v, w)と通る点P(p, q, r)で表される直線を与えたとします。
すると直線は媒介変数表示でP + t*Aとかけると思います。

この直線がどのセルを通過するのか、
またはあるセル(i, j, k)とこの直線が交わるか判別するには
どのように考えたら宜しいでしょうか?

実際には、光線が通過するセルとの2つの交点を求めて、そのセル内での光線の通過距離を計算しようとしています。

125 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 16:26:47 ]
数学板で聞いたとの事ですが
最終的に作りたいのはプログラムコードなわけですか?

126 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 16:42:16 ]
そうです。今のとこ考えてるのはセルの6つの面全部で切っちゃう方法
・x = iの時j < x < j+1かつk < z < k+1かどうか
・x = i + 1の時j < x < j+1かつk < z < k+1かどうか
といった具合にy = j, y =j+1, z = k, z = k + 1についても調べる。
で通る2点を計算、といった力技なのですが、もう少し手順を減らせそうな気がして・・・

127 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 16:53:50 ]
俺は>>126に書いてあることが理解できていないんだが
まず隣接する直方体をまとめて大きい直方体を作ってその直方体と
光線が交わるならその直方体の中の小さい直方体を調べる、という
やりかたで計算量を減らせると思うよ(八分木、oct tree)。

128 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 17:02:22 ]
DDAのように始点から追っていったらどう?
全体の直方体との交点のうち一方を始点に使って。

通過するセルの数は m + n + n よりも小さいし。


129 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 17:13:24 ]
問題が分からん

1) あるセル(i, j, k)と直線が交わるか判別する

判別して通ると分かった場合に

2) その通るセルと直線との交点(2つ)を求めて、
  そのセル内での光線の通過距離を計算する

ということ?

130 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 17:31:15 ]
ええ。最終的に光線の通るセルが分かる→そのそれぞれのセル内での通過距離が分かる様な感じです。

A)全てのセル(m*n*n個)について光線と交わるか判別する→その通るそれぞれのセルについて光線との交点とセル内での光線の通過距離を計算
B)直線の式から通過するセルが分かる夢のような方法→その通るそれぞれのセルについて光線との交点とセル内での光線の通過距離を計算

のどちらかでしょうか。実はプログラミング自体限りなく初心者なので
オクトリー・DDAなどのアドバイスしていただいたアルゴリズムについて勉強してみようと思います。



131 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 17:57:31 ]
2次元の正方格子で考えてみると、
光線を原点から方向ベクトル(1,√2)とすると、

最初の交点の候補は、x=1とy=1になる点(1/√2,1)と(1,√2)だが、
xの小さい(1/√2,1)が最初の交点。

その次の候補点はx=2かy=1のときで(√2,2)か(1,√2)
だが、xの小さいほうをとって(1,√2)
みたいにするとよいのでは。

距離と通ったセルは簡単にわかるだろ。
三次元だと3つから選ぶだけ。

132 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 18:16:16 ]
>>131に賛成。あるセルが通るかどうかを全部のセルについてやるより
x,y,zにだらーって整数を入れてって交点を求めてから、その交点がどのセルに属すかやったほうがよさげ。

133 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 18:19:11 ]
該当する格子の周囲(距離一)を探索すれば十分?

134 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 21:14:54 ]
>>124
"ray march"のようなことがやりたいのかな?

135 名前:124 mailto:sage [2005/11/03(木) 23:48:11 ]
沢山のアドバイス有難うございました。色々自分なりに調べてみたところ、>>128さんの仰ってくださったDDAや>>131さんの方法に似た方法で
CGの分野では直線描画の基本らしい「ブレゼンハムのアルゴリズム」というものがヒントになりそうです。
農学系の研究にCGの手法が役立つとは・・・本当に有難うございました。

136 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 13:11:07 ]
>>135
農学って、単位空間あたりの光量の計算とかでもするのかな?
CGでボクセル描画するのだとばっかりおもてたyo

137 名前:フローチャート [2005/11/08(火) 17:16:52 ]
自然数m、nに対して、mのn乗を計算する効率のよいアルゴリズムを
フローチャートで書け。

138 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 17:22:24 ]
>>137 フローチャートは勝手に書いてくれ
pow m n
  | n == 0         = 1
  | n `mod` 2 == 1 = m * pow m (n-1)
  | otherwise      = t * t where t = pow m (n `div` 2)

139 名前:デフォルトの名無しさん [2005/11/08(火) 17:32:16 ]
日本NO1プレミアムMMO
CreateGame〜陸海空オンライン〜

ただ今、鋭意開発中!力ある奴だけこい!


140 名前:フローチャート mailto:fh [2005/11/08(火) 19:32:26 ]
>>138
フローチャートを書け、という課題なので、フローチャートを書いてください



141 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 19:46:42 ]
>>140
そのぐらいは自分でやりなさい。そもそも掲示板にどうやって
フローチャートを描けと。

142 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 20:29:36 ]
こんなもんかな。
○pow(m, n)

│n==0
◇─┐
│  ○return 1

│n%2==1
◇─┐
│  ○return m * pow(m, n - 1)

□t = pow(m, n / 2)

○return t * t


143 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 20:55:31 ]
>>142
もっと効率よくできるはずです。やり直しなさい。

144 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 20:56:13 ]
>>142
あと、そのアルゴリズムにはバグが潜んでいます。なおしなさい。

145 名前:デフォルトの名無しさん [2005/11/11(金) 00:09:51 ]
晒しage

146 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 01:23:17 ]
>>137
○pow(m, n)

□ ret ← 1

△ ループ( i=0 ; i<m ; i++)

□ ret ← ret*n;



○ 戻り値 ← ret

147 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 04:00:38 ]
巡回セールスマン問題をブルートフォースで解くソースコードってないですか?
擬似コードでもいいです。

148 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 07:15:53 ]
>>147 枝刈りも何もなしでいいなら15分くらいで書けるでしょ

149 名前:147 mailto:sage [2005/11/13(日) 11:03:59 ]
>>148
その枝刈りも何もなしでいい15分くらいで書ける奴をお願いします。m(__)m

150 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 11:38:37 ]
>>149
その代わり解くのには数年間〜数十年間(ry



151 名前:147 mailto:sage [2005/11/13(日) 12:02:13 ]
>>150
ドサ回りする都市の数は5くらいまででいいです。

152 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 17:16:00 ]
>>151 入力データの仕様をください

153 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 18:28:11 ]
>>147
入力の仕様がわからなかったので,以下の仕様に従うことにした.標準入力から読み込む.
「1行目: 都市の数,2行目から: 都市1 都市2 その間の距離,終端: EOF」

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int inf = 1 << 30;
// brute force using recursion ( O(n!) )
int solve(int pos, int start, vector< vector<int> >& adj, vector<bool>& used) {
  used[pos] = true;
  int d = inf; 
  if (find(used.begin(), used.end(), false) == used.end()) d = adj[pos][start];
  for (int i = 0; i < used.size(); ++i) 
    if (!used[i]) d = min(d, adj[pos][i] + solve(i, start, adj, used));
  used[pos] = false;
  return d;
}
int main() {
  int n; cin >> n;
  vector< vector<int> > adj(n, vector<int>(n, inf));
  int a, b, d;
  while (cin >> a >> b >> d) adj[a][b] = adj[b][a] = d;
  vector<bool> used(n, false);
  int start = 0; used[start] = true;
  cout << solve(start, start, adj, used) << endl;
}

154 名前:147 mailto:sage [2005/11/14(月) 06:25:03 ]
>>153
ありがとうございます。仕様はそのとおりでいきましょう。
走らせるために
#define min(a,b) (((a)<(b))?(a):(b))

return 0;
を追加しましたが入力の仕方がいまいち分かりません。
都市a bがint型ですよね…。
--------------------------------------------------
3
a b 3
-1073741824
Press any key to continue
--------------------------------------------------
これ↓ではエラーが出て駄目ですし…
--------------------------------------------------
3
1 2 3
4 5 6
Press any key to continue
--------------------------------------------------
どう入力するんでしょうか?m(__)m

155 名前:147 mailto:sage [2005/11/14(月) 11:24:19 ]
>>153
ダメダメな自分でもようやく分かりました。
Ctrl+Qで終了というのが渋いですね。
少し改良しました。

--------------------------------------------------
Number of Cities: 4
Source Destination Distance:
0 1 2
0 2 4
0 3 3
1 2 3
1 3 6
2 3 1
^Q
9
Press any key to continue
--------------------------------------------------

後はもう少しコメントなどを入れて改良してみます。(当然n数は10を超えない程度で)
ありがとうございました!

156 名前:147 mailto:sage [2005/11/14(月) 11:58:32 ]
仕様を少し変更しました。パスの数をユーザーから求めて、その数だけ入力がされたら終了、としました。
#include <iostream>
#include <vector>
#include <algorithm>
#define min(a,b) (((a)<(b))?(a):(b))

using namespace std;
const int inf = 1 << 30;
// brute force using recursion ( O(n!) )
int solve(int pos, int start, vector< vector<int> >& adj, vector<bool>& visited) {
visited[pos] = true;
int d = inf;
if (find(visited.begin(), visited.end(), false) == visited.end()) d = adj[pos][start];
for (int i = 0; i < visited.size(); ++i)
if (!visited[i]) d = min(d, adj[pos][i] + solve(i, start, adj, visited)); //←ここで何か記録しないといけないんでしょうが…
visited[pos] = false;
return d;
}
void main() {
int cities, paths; cout << "Number of Cities: "; cin >> cities; cout << "Number of Paths: "; cin >> paths;
vector< vector<int> > adj(cities, vector<int>(cities, inf));
int a, b, d; cout << " S D Distance" << endl;
for (int i = 0; i < paths; ++i) {
cout << "Path" << i+1 << ": "; cin >> a >> b >> d; adj[a][b] = adj[b][a] = d;
}
vector<bool> visited(cities, false);
int start = 0; visited[start] = true;
cout << "The minimum distance is " <<solve(start, start, adj, visited) << endl;
}
あの、で、最短のルートを表示するにはどうしたらいいんでしょうか?本当にしつこくてすみません。m(__)m

157 名前:デフォルトの名無しさん mailto:sage [2005/11/14(月) 17:58:34 ]
いくつか手はあるけど,手っ取り早いのは「各 visited の状態から次何を選んだか」を
グローバルの map<vector<bool>, int> にでも覚えさせておくこと.
表示するときは適当な visited からスタートして,visited = 全部 true になるまで覚えさせた map を辿っていく.

具体的には下みたいな感じにやる.
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1082.cpp

158 名前:157 mailto:sage [2005/11/15(火) 06:58:17 ]
solve(i, start, adj, visited) を二回も呼んでるのが非効率なのでなんとかしといてください

159 名前:147 mailto:sage [2005/11/15(火) 15:43:57 ]
>>157
ありがとうございます!m(__)mハハァー m(__)mハハァー m(__)mハハァー m(__)mハハァー m(__)mハハァー
再帰の途中で覚えさせる方法が分からなくて困っていました。
なるほど、ああやって割り込むんですね。本当に勉強になります。
solve(i, start, adj, visited)を二回呼んでるのは後でなんとかします。

ああ、もっと賢くなりたい。←自分

160 名前:フローチャート mailto:fh [2005/11/23(水) 20:25:34 ]
価格A,Bの商品をそれぞれX,Y個、購入する場合の
支払い金額を計算するフローチャートを示せ。ただし、値引き率8%と
消費税5%を考慮すること



161 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 20:28:11 ]
>>160
そりは難しい課題だねえ。
まずはフローチャートを描くルーチンを作成しないと。

環境は何? まさか、線を引くルーチンから作らなくちゃいけない?

162 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 17:42:03 ]
その前に有理数体での加減乗除を定義しないと。
また、有理数の円未満の端数処理をどうするか検討しないとな。
切捨て?切りage?四捨五入?設定で選択できるようにしないと
実用に耐えないかもよ。

163 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 20:15:28 ]
意地悪なやつらめ。そんなおまえらが好きではあるけど。

164 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 21:21:57 ]
まあ 137 あたりの経緯があるからな

165 名前:デフォルトの名無しさん mailto:sage [2005/11/27(日) 18:06:06 ]
>>162
有理数体上の加減乗除は自明じゃねーの?

166 名前:デフォルトの名無しさん mailto:sage [2005/11/27(日) 21:26:38 ]
ていうかコンピュータ上では有理数全てを表現できないし

167 名前:デフォルトの名無しさん mailto:sage [2005/11/27(日) 21:35:56 ]
ディジタルコンピュータ上ではできないね。

168 名前:デフォルトの名無しさん mailto:sage [2005/11/27(日) 21:45:26 ]
全ては表現できなくても適当な位相さえ入れば十分でしょ

169 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 12:06:34 ]
てか、実数から見たら表現できる数値なんて穴だらけだよな。


170 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 18:13:16 ]
つ 区間演算



171 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 01:41:03 ]
配列nに対してn-1個の値があり、残りひとつはNULLでも0でもいいのでデータとしては何も入ってない状態。
その配列nの中のn-1個の数列を配列nの中だけでソートしたいのですが何かいいアイデアないでしょうか?
つまりデータ構造やポインタは勿論、
二分木や多分木を使ってヒープも駄目ということです。

172 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 02:00:23 ]
バブルソートなりクイックソートなり

173 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 03:54:54 ]
>171
状況がよくわからん。
具体的に。

174 名前:デフォルトの名無しさん mailto:age [2005/12/05(月) 16:33:28 ]
カタカナの「ノ」の形の離散データの極率を求める数値計算法ってありますか?
書物で調べたりググったりしていますが、見つかりません。


175 名前:174 mailto:age [2005/12/05(月) 16:35:59 ]
極率 ではなく 曲率 でした。

176 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 16:40:06 ]
二次回帰分析とかって話?

177 名前:174 mailto:age [2005/12/05(月) 16:58:41 ]
>>176
レスありがとうございます。
二次回帰分析ですと、y=a(x^2)+bx+c のa,b,cを決定するとこになると思われます。

今やりたいことは、例えば y = exp(-3*p)+q^2 に対応する離散データから
(p, q)を求めるというものです。
exp(x)は2次関数ではありませんが、例えばテイラー展開等で近似をすれば、
適応出来る物なのでしょうか?

178 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 19:46:30 ]
最小二乗フィッティングだね.
理論的には,s_1, ..., s_n をパラメータとする関数 f(x; s_1, ..., s_n) を
データ列 (x_1, y_1), ..., (x_N, y_N) にフィッティングするときは誤差の二乗和
φ(s_1, ..., s_n) = Σ(f(x_i; s_1, ..., s_n) - y_i)^2
を最小化する s_1, ..., s_n を求めてやればいい.

で,それは結構難しくて,凸関数とか条件付かないと最良解が出る保証は無い.
ある程度の解でいいなら,「勾配法 + アニーリング」くらいで,それなりに求まってくれるはず.

179 名前:デフォルトの名無しさん [2005/12/05(月) 19:50:09 ]
画像調整のガンマをスクロールバーで実装したいのですが、
イマイチ正確な定義が分かりません。

それか、組み込めるライブラリどこかに落ちてないでしょうか?

180 名前:174 mailto:age [2005/12/05(月) 20:15:07 ]
>>178
詳しいレスありがとうございます。
今現在では、範囲と精度を与えて、全部の(p, q)について調べ、その誤差の二乗和が
最小になる(p, q)の組を解としています。

勾配法、アニーリングを調べてみて、検討してみます。



181 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 20:17:32 ]
>>179
質問の意味がわからないけど多分スレ違い。

・言語と開発ツールは何を使ってるのか
・具体的にやりたいことは何か
・今自分は何がわからないのか

この三点をはっきりさせて、適切なスレに行って聞いてください。

182 名前:デフォルトの名無しさん [2005/12/05(月) 21:10:48 ]
あるデータ列に
Y = (A(X^3)+B(X^2))/(CX+D)
の最小自乗法を適応するばあい、
残差の2乗和 S に対して
A, B, C, Dそれぞれで偏微分したもの = 0
の連立方程式を解いて、
A = Σを含む式
B = ...
C = ...
D = ...
とすれば良いのでしょうか?

簡単な式の最小自乗法しか使っていなかったので、
そのまま適応して良いものかどうかが分かりません。
お願いします。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<251KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef