トップページ⇒tech
982コメント324KB

アルゴリズムに関する質問、議論総合スレ

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん NGNG
アルゴリズムの質問、議論ならなんでもよし。
類似スレが多くてどこに書きこめば分からないときは
とりあえずこちらにどうぞ。
0932デフォルトの名無しさんNGNG
>>931
移動してたよ
ttp://www.google.co.jp/search?q=cache:LwzrvbrtNZEJ:www.nhk.or.jp/sch/sch2002/schoolpro/youho/pitagora.html+&hl=ja&ie=UTF-8&inlang=ja
0933デフォルトの名無しさんNGNG
なんとなくフリーセルのクローンを作ろうかなと思い立ち、頭の中で妄想
してみたんですが、問題作成アルゴリズムの見当が全く付きません;

どなたかクローン作った事ある方いらしたら大まかでよろしいので
教えて頂けませんか。。。
0934デフォルトの名無しさんNGNG
>>933
Windowsのフリーセルで、ゲーム番号の指定で-1か-2と入れてみな。絶対に勝てないから。
0935デフォルトの名無しさんNGNG
? -1・-2は遊びでしょう。
アレ以外は全部解ける様に作られてるわけで。
0936デフォルトの名無しさんNGNG
とけるような配置を作ることは出来るのは分かるけど、
ランダムに配置した場合にとけない場合があるかどうかって証明済?
0937デフォルトの名無しさんNGNG
>>936
例えば、 -1・-2
乱数でばらまいて出る事はまずあり得ないけど。
0938デフォルトの名無しさんNGNG
CSVファイルの中身を検索したい場合、
今は、全部の行を配列に読み込んで、
その配列内をループして検索してますが、
ファイルの行数が300〜500くらいあるので時間がかかります。

もっと早く検索する方法ってあるんでしょうか。
0939デフォルトの名無しさんNGNG
>>938
どんなレコード構造で、どんなデータを探したいのか書け
0940学生NGNG
次のような課題が出ました.
----
データ(x_i, y_i) [i=(1,2,・・・,N)] を直線近似する.
直線とそれぞれの点との 距離r_i の距離の和
Σr_i
を最小にする直線を求める方法でプログラミングせよ.
----

直線( ax + by + c = 0 )と点 (x_i, y_i) との距離は
r_i = | a * x_i + b * y_i + c | / sqrt{a^2+b^2}
なので,距離の和は
Σr_i
であり,これが最小になる a, b, c を求めればいいことはわかりました.
しかし,この先がわかりません.
最小自乗法の式の導き方はわかったのですが,
今回のやり方では偏微分の式の中に絶対値が入ってしまっているので,
どうしたらいいかわかりません.
ヒントください.
0941デフォルトの名無しさんNGNG
>>940
マルチポスト非常にうざい。
氏ね。
0942デフォルトの名無しさんNGNG
>>940
ttp://pc2.2ch.net/test/read.cgi/tech/1053963794/933-
0943デフォルトの名無しさんNGNG
>>941もマルチポストな罠
0944941NGNG
>>943
許してくれよ
0945デフォルトの名無しさんNGNG
レコード構造は
登録日(yyyymmdd),姓,名,姓ふりがな,名ふりがな,性別,年齢,E-Mail,電話番号

検索というより、ソートと抽出です。
全行を姓ふりがな、名ふりがなの値を利用して、五十音順(文字コード順)にソート。
その後、
性別(男、女、すべて)
年齢(20歳以下、30歳以下、40歳以下、すべて)
の条件に合うデータを抽出したいと考えています。
0946940NGNG
C/C++の宿題 のスレッドに書き込みしましたが,
こっちのスレッドのほうが質問の内容に適していると思い,
こちらに書き込みさせていただきました.
すいません.
0947938NGNG
945は939に対する返信です。
0948デフォルトの名無しさんNGNG
>>943-944
ワラタ
最高だ
0949デフォルトの名無しさんNGNG
>>946
もう遅い。自分で解決するんだな
0950デフォルトの名無しさんNGNG
>>945
検索するキーごとについて予めソートしておく。
それぞれのキーについて二分法で探索し、得られた結果の共通部分をとる。
0951940NGNG
>>949
がんばってみます.すいませんでした.
0952デフォルトの名無しさんNGNG
941 名前:デフォルトの名無しさん :03/06/06 23:57
>>940
マルチポスト非常にうざい。
氏ね。


942 名前:デフォルトの名無しさん :03/06/06 23:58
>>940
ttp://pc2.2ch.net/test/read.cgi/tech/1053963794/933-


943 名前:デフォルトの名無しさん :03/06/06 23:59
>>941もマルチポストな罠


944 名前:941 :03/06/07 00:00
>>943
許してくれよ          
0953945NGNG
>950

あらかじめ、インデックスを作成しておくということですね。

全部の行を読むのは仕方ないにしても、検索処理は早くなりそうですね。
データファイルの更新日付を見て、更新されていなければ現在のインデックスファイルを
利用して、更新されていればその場でインデックスを作り直すというのがいいんでしょうか。
0954デフォルトの名無しさんNGNG
>>953
インデックス再構成のスケジュールは用途に応じて決めるべし。
オンデマンドで再構成だと応答の遅延が実用的でないかもしれないし、
更新が頻繁だとロックする必要がある。

検索が定型ならインデックスのインデックスを更に作っておくと早い。
例えば年齢に関するインデックス(それはレコードへのポインタの配列だろう)の
何番目からがn歳以上なのかをインデックスしておくと、検索の必要がない。

ただし、この配列の共通部分の計算がボトルネックになる場合は、
ソートせずにビットマップで持っておく。
例えば age[10] は i 番目の人が10歳であるときに age[10][i] = 1 であり
そうでなければ age[10][i] = 0 であるようなビットマップ。
これらのビットマップを年齢や単語などの数だけ用意しておき、
合致するデータをマスクとの積によって計算しビットマップの束として得る。
最後にこの束についてビット積をとることで求めたい共通部分が出る。
ビットマップ演算を bitfield で出来るのでtune-upしやすい。
また、定型の検索についてはマスクとの積を予め行なっておくことで、
要求時には共通部分をとる操作だけで済む。
googleなどで使われているのはおそらくこの手の方法じゃなかろうか。
0955デフォルトの名無しさんNGNG
n個の異なる数の集合から正確に(n+1)/2番目の要素、つまり中央値を縮小法を使ってアルゴリズムを設計しなさい。
ってでました。助けて下さい。
0956デフォルトの名無しさんNGNG
>>955
意味がわからん
0957デフォルトの名無しさんNGNG
>>955
寡聞にして縮小法というのを知らないのだが、
Hoareのfindアルゴリズムがそれになっていないかな?
0958デフォルトの名無しさんNGNG
手の始点と終点の座標及び関節が曲がることのできる角度から
関節部の座標を求めるアルゴリズムってなんでしたっけ?
わかりづらくてすんません。
0959デフォルトの名無しさんNGNG
>>958
インバースキネマティクス
0960958NGNG
ありがとうヽ(`Д´)ノ
0961デフォルトの名無しさんNGNG
有る点が領域(直線のみでよい)内に有るかの判断
何かいい方法有りますか?
0962デフォルトの名無しさんNGNG
>>961
意味がわからん。
2次元空間で、その領域が直線のみで囲まれているということか?
0963デフォルトの名無しさんNGNG
>>961
もしかしてこんなものをお探しですか?
http://www.google.co.jp/search?q=Ray-Intersection+Method&lr=lang_ja
0964デフォルトの名無しさんNGNG
>>962
すみません。そのとうりです
0965_NGNG
http://homepage.mac.com/hiroyuki44/hankaku10.html
0966デフォルトの名無しさんNGNG
>>961
ありがとうございます。
でも、この方法だと半無限線の方向が問題になると思われます
仮に半無限線を+の水平方向にした場合

*********   **********
*    *    *    *
*   *   *    *
* × ********     *
*       *
*       *
*       *
*************************

***********
* *
* *
* × *******
* *
* *
* *
*****************

上は交点3、下は交点2ですが
どちらも領域内部です
0967デフォルトの名無しさんNGNG
すいません絵がめちゃくちゃですね
0968デフォルトの名無しさんNGNG

************    **********
*     *    *    *
*     *    *    *
*  ×  **********    *
*              *
*              *
*              *
******************************

************
*     *
*     *
*  ×  *****
*       *
*       *
*       *
****************

半無限線が水平で作成した場合
上は交点3、下は交点2ですが
どちらも領域内部です
0969デフォルトの名無しさんNGNG
半無限線て何?
0970デフォルトの名無しさんNGNG
996>>無限線の端点が固定された直線の事です
0971デフォルトの名無しさんNGNG
↑969>>の間違いでした
0972デフォルトの名無しさんNGNG
絵がうまく描けませんが、上は凹、下はL字型です
0973デフォルトの名無しさんNGNG
無限線て何?
0974デフォルトの名無しさんNGNG
>>969
半分、無限の線

>>973
無限の線
0975デフォルトの名無しさんNGNG
「線」・「直線」は、無限長。
「半直線」・「半無限〜」は、片側が端点で、もう片方が無限。
「線分」が、両方に短点を持つもの。
0976デフォルトの名無しさんNGNG
>>975
短点 → 端点 でした。
端点って辞書に載ってないのね。専門用語だから?それとも誤用?
0977デフォルトの名無しさんNGNG
直線・半直線は知ってるが、無限線・半無限線なんて聞いたことない。
どっかの業界の隠語?
0978デフォルトの名無しさんNGNG
CADでは日常ちゃめしごとと思われますです

0979_NGNG
http://homepage.mac.com/hiroyuki44/hankaku10.html
0980デフォルトの名無しさんNGNG
>>966 検索した>>963の中に、
>方式1 交差回数法: 点qから直線を引き、多角形と何度交わるか
>方式2 巻付判定法: 多角形をゴムに換えたら点qに巻付くか?
> =点qから見て多角形の線分を順に追いかけてゆくと1回転以上するかどうか

とあって、サンプルコードまで付いてるじゃないか。よく見てみなさい。

>方式1 交差回数法:y軸と交わった時の符号が正ならインクリメント
> 線分が y軸と交わるかどうかは 線分の始点終点のx座標の符号が違うかどうか

でサンプルコードはこうだ
> if ((rx<0)and(nx>=0)) or ((rx>=0) and (nx<0)) then begin
  この部分で水平線はひっからないだろ? 
0981デフォルトの名無しさんNGNG
980>>ありがとうございます。水平線はひっかからない?
これは、方式2のサンプルですよね。
良く解らないですが(頭悪いので)、サンプル手に入りました。みなさんありがとうございました
0982デフォルトの名無しさんNGNG
>>981
1も2も考え方は違うけどコードは殆ど同じになると書いてあるぞ
レス数が950を超えています。1000を超えると書き込みができなくなります。