- PR -

[VB.NET] 指定の数値群より近似値を求める方法

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-12 16:24
引用:

うにくまさんの書き込み (2006-05-12 15:52) より:

以下が条件なので、
引用:

KIMERAさんの書き込み (2006-05-12 11:27) より:

数値群{8,9,10,14,16,20}

10を指定した場合は10が返る
11を指定した場合は10が返る
12を指定した場合は10が返る(同じ近似値がある場合[10,14]小さい方を優先する)




なるほど、そういう意味ですね。納得しました

引用:

うにくまさんの書き込み (2006-05-12 15:52) より:

先ほどの例では、6が期待する結果になると思います。



しかし、ソートされていなくても全件舐めるなら先の例で6を返すことは可能です
よね?

検証する対象の配列が小さい値順に既に並んでいる状態ならバイナリサーチするの
が速いと思います。
そうでないなら、先頭でソートメソッドを実行してから値を探すのは非効率ではな
いでしょうか?
自前でループ書いて一周させるよりソートメソッドの方が速いなら、先頭にソート
メソッド実行する方法が良いのでしょうけど。

#と言うか論点がずれていますね。
#僕がいいたいのは、スレ主さんのサンプルではなく、ソートメソッドを先頭で実
#行する理由についてのお話なので。

[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-05-12 16:28 ]
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2006-05-12 16:36
元汎用機erとしては
比較に使用するデータは先ずソート!(もちJCLで!!)


ソートを前提にするとロジックが間単になるのでお薦め。
よほどのデータ量とか特殊な事情でない限り、ロジック > 速度 が吉。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-12 16:59
引用:

Yamさんの書き込み (2006-05-12 16:36) より:
元汎用機erとしては
比較に使用するデータは先ずソート!(もちJCLで!!)

ソートを前提にするとロジックが間単になるのでお薦め。
よほどのデータ量とか特殊な事情でない限り、ロジック > 速度 が吉。


これは僕も賛成です。
データ量が少ないのであれば、大した問題ではないですから、臨機応変が一番ですね。
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-05-12 17:11
引用:

ソートされていなくても全件舐めるなら先の例で6を返すことは可能ですよね?


ソートされいてもいなくても、そのようにコーディングすれば可能です。(当たり前ですが)
でも、KIMERAさんのコードでは無理ですよね?

ソートが前提条件でなければ、以下のようになると思います。
コード:
Private Function GetBestSize(size As Integer) As Integer
    Dim dif As Integer
    Dim tmp As Integer = 20
    Dim BaseVal As Integer = Integer.MaxValue
    Dim ret As Integer

    If IsNothing(Sizelist) Then
        Return size
    End If

    If Sizelist.Contains(size) Then
        Return size
    End If

    For Each BaseSize As Integer In m_FontSizelist
        dif = Math.Abs(size - BaseSize)
        If tmp >= dif AndAlso BaseVal > BaseSize Then
            tmp = dif
            BaseVal = BaseSize
            ret = BaseSize
        End If
    Next
    Return ret
End Function




追伸:
どの方法が良いとか悪いとかではなく、ソートを前提としていないなら考慮が抜けてますよ。
と、言いたかっただけです。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-12 18:02
引用:

ぼのぼのさんの書き込み (2006-05-12 16:13) より:

引用:

このメソッドは、QuickSort アルゴリズムを使用します。この実装では不安定な並べ替


だそうです。


QuickSort してたんですね。勉強になりました。

引用:

うにくまさんの書き込み (2006-05-12 17:11) より:

どの方法が良いとか悪いとかではなく、ソートを前提としていないなら考慮が抜けてますよ。
と、言いたかっただけです。


そのようですね。やはり論点がずれていたようで、納得しました(^−^)

スキルアップ/キャリアアップ(JOB@IT)