如何在matlab官网上查找算法的源程序

如何在matlab官网上查找算法的源程序,第1张

matlab自带的有遗传算法工具箱,也就是两个函数,分别是

x = ga(fitnessfcn,nvars,a,b,aeq,beq,lb,ub,nonlcon,options)

options = gaoptimset('param1',value1,'param2',value2,)在帮助文件(doc

ga/gaoptimset)里面自己好还看看它的用法就可以了,每一个参数都有详细的说明,应该可以帮助到你。

基本思想 : 属于 无序查找算法 ,从数据表的一端顺序扫描,依次将数据元素的关键值与给定值Value比较,直至找到相等的表示成功,或扫描结束仍未找到,表示失败;

复杂度分析

基本思想 数据表必须为有序表 ,属于 有序查找算法 ;如果数据表原本无序,则先要进行排序 *** 作;

给定值为Value,与数据表中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据Value与该中间结点关键字的比较结果确定下一步查找哪个子表,这样 递归 下去,直到查找到或查找结束发现表中没有这样的结点。

复杂度分析

分块查找的数据表的特点 : 分块有序 即[ 块间有序,块内无序 ]

基本思想 :将一个 n 个数据元素的数据表 "按块有序" 划分为 m 块(m<=n),每个块中元素关键字不必有序,但块与块之间必须 "按块有序" ; 第 1 个块中的任一元素的关键字 小于 第 2 个块中的任一元素的关键字(或大于),第 2 个块中的任一元素的关键字 小于 第 3 个块中的任一元素的关键字(或大于)

分块算法流程

Option Base 1

Private Function find(a() As Single, x As Single) As Integer

Dim n%, p%

n = UBound(a) '数组元素个数

For p = 1 To n '循环每个元素

If x = a(p) Then Exit For '如果找到相同 则退出循环 此时的P值既是结果

Next p

'如果没找到 P值将会是 N+1

If p > n Then p = 0

find = p

End Function

Private Sub Form_click()

Dim test(10) As Single

Dim x As Single

Randomize

For i = 1 To 10

test(i) = Int(Rnd 10 + 1)

Next

x = 2 '

MsgBox find(test, x)

End Sub

//顺序查找

//思路:从表中最后一个记录开始,逐个进行记录的关键字和

//给定值的比较,若某个记录的关键字和给定值比较相等,则

//返回返回记录所在的位置,或查找完所有记录后还没有发现

//符合的记录,则查找失败。

#include <stdioh>

#include <stdlibh>

#include <mathh>

#include <timeh>

#define N 10

typedef int DataType;//定义比较的元素类型

//静态查找表的顺序存储结构

typedef struct{

DataType data;//数据元素存储空间基址,按实际长度分配,0号单元留空

//建表时按实际长度分配,0 号单元留空

int length;//表长度

}SSTable;

//创建一个静态表,内容为20以内的随机数

void createST(SSTable ST,int n){

int i;

time_t t;

if(ST!=NULL){

ST->data=(DataType)calloc(n+1,sizeof(DataType));

if(ST->data!=NULL){

srand((unsigned) time(&t));

for(i=1;i<=n;i++){

ST->data[i]=rand() ;//产生20以内的随机数

}

ST->length=n;

}

}

}

//创建一个静态表,内容按从小到大排列,以便折半查找

void createST_binary(SSTable ST,int n){

int i,j=0;

time_t t;

if(ST!=NULL){

ST->data=(DataType)calloc(n+1,sizeof(DataType));

if(ST->data!=NULL){

for(i=1;i<=n;i++){

ST->data[i]=j;

j+=4;

}

ST->length=n;

}

}

}

//打印出静态表的内容

void print_SSTable(SSTable ST){

int i,n=ST->length;

if(ST!=NULL){

for(i=1;i<=n;i++){

printf("%d ",ST->data[i]);

}

printf("\n");

}

}

//顺序查找(Sequential Search)

//思路:从表中最后一个记录开始,逐个进行记录的关键字和

//给定值的比较,若某个记录的关键字和给定值比较相等,则

//返回返回记录所在的位置,或查找完所有记录后还没有发现

//符合的记录,则查找失败。

//查找成功:返回记录所在位置

//查找失败:返回0

int search_seq(SSTable ST,DataType key){

int i;

if(STdata==NULL)return 0;

STdata[0]=key;//设置监视哨。目的在于免去查找过程中每一步都要检测整

//个表是否查找完毕,是一个很有效的程序设计技巧 。监视

//哨也可以设在高下标处。

for(i=STlength;STdata[i]!=key;i--);

return i;

}

//折半查找(Binary Search)

//当记录的key按关系有序时可以使用折半查找

//思路:对于给定key值,逐步确定待查记录所在区间,每次将搜索空间减少一半(折半),

//直到查找成功或失败为止。

int search_binary(SSTable ST,DataType key){

int low,high,mid;

low=1;

high=STlength;

while(low<=high){//当表空间存在时

mid=(low+high)/2;

if(STdata[mid]==key){

return mid;//查找成功,返回mid

}

if(key<STdata[mid]){

high=mid-1;//继续在前半区间查找

}else{

low=mid+1;//继续在后半区间查找

}

}

return 0;//查找失败

}

//分块查找(只记录思想)

//分块查找中,设记录表长为n,将表的n个记录分成b=n/s个块,每个s个记录

//最后一个记录数可以少于s个,且表分块有序,即后一个块的所有key值大于

//前一个块的所有key值

//每块对应一个索引项,索引项记录了该块记录的最大key值和该块第一记录的指针(或序号)

//算法:

//(1)由索引表确定待查找记录所在的块;

//(2)在块内顺序查找。

int main(){

int n=20;//在20个数中查找,方便看结果,不要设置得太大

SSTable ST,ST_binary;//分别用于顺序查找和折半查找的静态表

index indtb[n+1];//索引表,用于分块查找

createST(&ST,n);//创建一个随机静态表

createST_binary(&ST_binary,n);//创建一个从小到大顺序排列的静态表

//采用顺序查找

printf("原始数据:");

print_SSTable(&ST);

printf("顺序查找5的结果:%d\n",search_seq(ST,5));

printf("顺序查找10的结果:%d\n",search_seq(ST,10));

printf("顺序查找12的结果:%d\n",search_seq(ST,12));

printf("顺序查找15的结果:%d\n",search_seq(ST,15));

printf("顺序查找20的结果:%d\n",search_seq(ST,20));

printf("--------------------------------------------\n");

//采用折半查找

printf("原始数据:");

print_SSTable(&ST_binary);

printf("折半查找5的结果:%d\n",search_binary(ST_binary,5));

printf("折半查找10的结果:%d\n",search_binary(ST_binary,10));

printf("折半查找12的结果:%d\n",search_binary(ST_binary,12));

printf("折半查找15的结果:%d\n",search_binary(ST_binary,15));

printf("折半查找20的结果:%d\n",search_binary(ST_binary,20));

system("pause");//暂停一下,看看结果

free(STdata);//不要忘了释放堆空间

return 0;

}

python快速查找算法应用实例

文实例讲述了Python快速查找算法的应用,分享给大家供大家参考。

具体实现方法如下:

import random

def partition(list_object,start,end):

random_choice = start

#randomchoice(range(start,end+1))

#把这里的start改成random()效率会更高些

x = list_object[random_choice]

i = start

j = end

while True:

while list_object[i] < x and i < end:

i += 1

while list_object[j] > x:

j -= 1

if i >= j:

break

list_object[i],list_object[j] = list_object[j],list_object[i]

print list_object

#list_object[random_choice] = list_object[j]

#list_object[j] = random_choice

return j

def quick_sort(list_object,start,end):

if start < end:

temp = partition(list_object,start,end)

quick_sort(list_object,start,temp-1)

quick_sort(list_object,temp + 1 ,end)

a_list = [69,65,90,37,92,6,28,54]

quick_sort(a_list,0,7)

print a_list

程序测试环境为Python276

输出结果如下:

[54, 65, 28, 37, 6, 69, 92, 90]

[6, 37, 28, 54, 65, 69, 92, 90]

[6, 37, 28, 54, 65, 69, 92, 90]

[6, 28, 37, 54, 65, 69, 92, 90]

[6, 28, 37, 54, 65, 69, 90, 92]

[6, 28, 37, 54, 65, 69, 90, 92]

希望本文所述对大家的Python程序设计有所帮助。

以上就是关于如何在matlab官网上查找算法的源程序全部的内容,包括:如何在matlab官网上查找算法的源程序、Ⅳ. 查找算法(Search Algorithm)、使用顺序查找法,在一组数中查找某给定的数x。VB程序 编写个实例代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9318095.html

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

发表评论

登录后才能评论

评论列表(0条)

保存