數(shù)據(jù)結(jié)構(gòu)教程第三課算法及算法設(shè)計(jì)要求

字號(hào):

本課主題: 算法及算法設(shè)計(jì)要求
    教學(xué)目的: 掌握算法的定義及特性,算法設(shè)計(jì)的要求
    教學(xué)重點(diǎn): 算法的特性,算法設(shè)計(jì)要求
    教學(xué)難點(diǎn): 算法設(shè)計(jì)的要求
    授課內(nèi)容:
    一、算法的定義及特性
    1、定義:
    ispass(int num[4][4])
    { int i,j;
    for(i=0;i<4;i++)
    for(j=0;j<4;j++)
    if(num[i][j]!=i*4+j+1)/*一條指令,多個(gè)操作*/
    return 0;
    return 1;
    }/*上面是一個(gè)類(lèi)似華容道游戲中判斷游戲是否結(jié)束的算法*/
    算法是對(duì)特定問(wèn)題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個(gè)或多個(gè)操作;此外,一個(gè)算法還具有下列五個(gè)重要特性:
    2、算法的五個(gè)特性:
    有窮性 一個(gè)算法必須總是(對(duì)任何合法的輸入值)在執(zhí)行有窮步之后結(jié)束,且每一步都可在有窮時(shí)間內(nèi)完成;
    確定性 算法中每一條指令必須有確切的含義,讀者理解時(shí)不會(huì)產(chǎn)生二義性。有任何條件下,算法只有的一條執(zhí)行路徑,即對(duì)于相同的輸入只能得出相同的輸出。
    可行性 一個(gè)算法是能行的,即算法中描述的操作都是可以通過(guò)已經(jīng)實(shí)現(xiàn)的基本運(yùn)算執(zhí)行有限次來(lái)實(shí)現(xiàn)的。
    輸入 一個(gè)算法有零個(gè)或多個(gè)的輸入,這些輸入取自于某個(gè)特定的對(duì)象的集合。
    輸出 一個(gè)算法有一個(gè)或多個(gè)的輸出。這些輸出是同輸入有著某些特定關(guān)系的量。
    例:
    有窮性 haha()
    {/*only a joke,do nothing.*/
    }
    main()
    {printf("請(qǐng)稍等...您將知道世界的未日...");
    while(1)
    haha();
    }
    確定性 float average(int *a,int num)
    {int i;long sum=0;
    for(i=0;i    sum+=*(a++);
    return sum/num;
    }
    main()
    {int score[10]={1,2,3,4,5,6,7,8,9,0};
    printf("%f",average(score,10);
    }
    可行性
    輸入
    輸出 getsum(int num)
    {
    int i,sum=0;
    for(i=1;i<=num;i++)
    sum+=i;
    } /*無(wú)輸出的算法沒(méi)有任何意義,
    二、算法設(shè)計(jì)的要求
    1、正確性
    算法正確性的四個(gè)層次
    程序不含語(yǔ)法錯(cuò)誤。 max(int a,int b,int c)
    {
    if (a>b)
    {if(a>c) return c;
    else return a;
    }
    }
    程序?qū)τ趲捉M輸入數(shù)據(jù)能夠得出滿足規(guī)格說(shuō)明要求的結(jié)果。 max(int a,int b,int c)
    {
    if (a>b)
    {if(a>c) return a;
    else return c;
    }
    } /* 8,6,7 */ /* 9,3,2 */
    程序?qū)τ诰倪x擇的典型、苛刻而帶有刁難性的幾組輸入數(shù)據(jù)能夠得出滿足規(guī)格說(shuō)明要求的結(jié)果。 max(int a,int b,int c)
    {
    if (a>b)
    {if(a>c) return a;
    else return c;
    }
    else
    {if(b>c) return b;
    else return c;
    }
    }
    程序?qū)τ谝磺泻戏ǖ妮斎霐?shù)據(jù)都能產(chǎn)生滿足規(guī)格說(shuō)明要求的結(jié)果。
    2、可讀性
    3、健壯性
    4、效率與低存儲(chǔ)量需求
    效率指的是算法執(zhí)行時(shí)間。對(duì)于解決同一問(wèn)題的多個(gè)算法,執(zhí)行時(shí)間短的算法效率高。
    存儲(chǔ)量需求指算法執(zhí)行過(guò)程中所需要的大存儲(chǔ)空間。
    兩者都與問(wèn)題的規(guī)模有關(guān)。
     算法一 算法二
    在三個(gè)整數(shù)中求大者 max(int a,int b,int c)
    {if (a>b)
    {if(a>c) return a;
    else return c;
    }
    else
    {if(b>c) return b;
    else return c;
    }/*無(wú)需額外存儲(chǔ)空間,只需兩次比較*/ max(int a[3])
    {int c,int i;
    c=a[0];
    for(i=1;i<3;i++)
    if (a[i]>c) c=a[i];
    return c;
    }
    /*需要兩個(gè)額外的存儲(chǔ)空間,兩次比較,至少賦值*/
    /*共需5個(gè)整型數(shù)空間*/
    求100個(gè)整數(shù)中大者 同上的算法難寫(xiě),難讀 max(int a[100])
    {int c,int i;
    c=a[0];
    for(i=1;i<100;i++)
    if (a[i]>c) c=a[i];
    return c;
    }
    /*共需102個(gè)整型數(shù)空間*/
    三、總結(jié)
    1、算法的特性
    2、算法設(shè)計(jì)要求:正確性、可讀性、健壯性、效率與低存儲(chǔ)量需求。