什么是最小显著差法(LSD)?

什么是最小显著差法(LSD)?,第1张

多重比较有多种方法,主要三种:最小显著差数法(LSD)、复极差法(q)和Duncan氏新复极差法(SSR)。

最小显著差数法 (least significant difference)

简称 LSD法,实质上是t测验。

程序:处理间 F测验显著的前提下,计算出显著水平为α的最小显著差数LSD α ;任何两个平均数的差数 ,如其绝对值≥LSD α ,即为在α水平上显著;反之,则为在α水平上不显著。该法又称为F测验保护最小显著差数法(Fisher's Protected LSD, FPLSD)

lsd法多重比较是指Least Significant Digit(最低有效位)法多重比较,是一种排序算法,可以快速地将一组数据按照从小到大的顺序排序。它的基本思想是从最低有效位开始比较,如果最低有效位相同,就比较次低有效位,以此类推,直到比较的有效位全都相同,则比较完成。

lsd法多重比较的优点是它可以很快地将一组数据排序,而且不需要分配额外的存储空间,只需要一次遍历即可完成排序。另外,它还可以用于解决问题,如求解线性规划问题和字符串匹配问题。

C语言源代码:

#include<stdio.h>

#include <stdlib.h>

#define N 1024

int RadixCountSort(int* npIndex, int nMax, int* npData, int nLen)

{

int* pnCount  = (int*)malloc(sizeof(int)* nMax)        //保存计数的个数

int i=0

for (i = 0 i < nMax ++i)

{

pnCount[i] = 0

}

for (i = 0 i < nLen ++i)    //初始化计数个数

{

++pnCount[npIndex[i]]

}

for (i = 1 i < 10 ++i)  //确定不大于该位置的个数。

{

pnCount[i] += pnCount[i - 1]

}

int * pnSort  = (int*)malloc(sizeof(int) * nLen)    //存放零时的排序结果。

//注意:这里i是从nLen-1到0的顺序排序的,是为了使排序稳定。

for (i = nLen - 1 i >= 0 --i)

{

--pnCount[npIndex[i]]

pnSort[pnCount[npIndex[i]]] = npData[i]

}

for (i = 0 i < nLen ++i)        //把排序结构输入到返回的数据中。

{

npData[i] = pnSort[i]

}

free(pnSort)                        //记得释放资源。

free(pnCount)

return 1

}

//基数排序

int RadixSort(int* nPData, int nLen)

{

//申请存放基数的空间

int* nDataRadix    = (int*)malloc(sizeof(int) * nLen)

int nRadixBase = 1    //初始化倍数基数为1

int nIsOk = 0 //设置完成排序为false

int i

//循环,知道排序完成

while (nIsOk==0)

{

nIsOk = 1

nRadixBase *= 10

for (i = 0 i < nLen ++i)

{

nDataRadix[i] = nPData[i] % nRadixBase

nDataRadix[i] /= nRadixBase / 10

if (nDataRadix[i] > 0)

{

nIsOk = 0

}

}

if (nIsOk==1)        //如果所有的基数都为0,认为排序完成,就是已经判断到最高位了。

{

break

}

RadixCountSort(nDataRadix, 10, nPData, nLen)

}

free(nDataRadix)

return 1

}

int main(int argc,char *argv[])

{

int i=0

int j

int nData[N]

printf("请输入你要排序的个数:")

scanf("%d",&j)

if(j==0) return 0

printf("请输入的%d个整数:",j)

for(i=0i<ji++)

{

scanf("%d",&nData[i])

}

RadixSort(nData, j)

printf("基数排序法排序后:\n")

for (i = 0 i < j ++i)

{

printf("%d ", nData[i])

}

printf("\n")

return 0

}

运行效果如图


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7884337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存