亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        計(jì)算機(jī)輔助教學(xué)計(jì)劃編制系統(tǒng)的研究

        2008-04-12 00:00:00趙忠平
        中國(guó)教育信息化 2008年7期

        摘 要:本文提出了一種普通高校計(jì)算機(jī)輔助教學(xué)計(jì)劃編制的實(shí)現(xiàn)方法。通過仿真實(shí)驗(yàn),該方法在教學(xué)計(jì)劃編制的精確性和其他性能方面是可行的。

        關(guān)鍵詞:計(jì)算機(jī) 教學(xué)計(jì)劃

        中圖分類號(hào):G434 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1673-8454(2008)13-0054-04

        在高等院校,制定各專業(yè)各學(xué)期的教學(xué)計(jì)劃越來越成為一件繁重的工作。為了降低教務(wù)工作者的勞動(dòng)強(qiáng)度,提高勞動(dòng)效率,筆者通過實(shí)驗(yàn)研究給出了高等院校計(jì)算機(jī)輔助教學(xué)計(jì)劃編制系統(tǒng)的實(shí)現(xiàn)方法。

        每個(gè)專業(yè)都有固定的學(xué)習(xí)年限,每年含兩學(xué)期,每學(xué)期的時(shí)間長(zhǎng)度和學(xué)分上限均相等。每個(gè)專業(yè)開設(shè)的課程都是確定的,而且課程在開設(shè)時(shí)間的安排上必須滿足先修關(guān)系。每門課程有哪些先修課程是確定的,可以有多門,也可以沒有。每門課程恰好占一個(gè)學(xué)期,如果某門課在一學(xué)期不能修完,則可將此看作兩門或兩門以上的課程處理(如英語(yǔ),可將其看作英語(yǔ)1、英語(yǔ)2等)。另外,教學(xué)計(jì)劃要求課程盡可能地集中在前幾個(gè)學(xué)期中但不能超過學(xué)分上限。

        一、算法設(shè)計(jì)思想

        1.有的課程(如政治等)既沒有先修課又不是其它課的先修課,用戶可以事先指定在某個(gè)學(xué)期學(xué)習(xí)這些課程;有的課程可能是其它課的先修課,也可能是以其它課為先修課,對(duì)這些課程的安排可以通過構(gòu)造AOV網(wǎng)(如圖1所示,用頂點(diǎn)表示課程,用有向弧表示先修關(guān)系)然后進(jìn)行拓?fù)渑判驔Q定其在某學(xué)期學(xué)習(xí),對(duì)此采用圖的鄰接表表示存儲(chǔ)結(jié)構(gòu)。

        2.制定第i學(xué)期的教學(xué)計(jì)劃時(shí),首先選擇同時(shí)符合下列條件(后稱條件1)的所有課程:

        (1)指定學(xué)習(xí)某門課的時(shí)間leaned_in_term=i;

        (2)標(biāo)志位leaned=0。

        將其標(biāo)志位leaned置為1(已修),用輔助變量crednum存儲(chǔ)符合該條件的所有課程的學(xué)分和,由于這些課程總數(shù)無法預(yù)先知道,故對(duì)此采用線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。為了使課程盡可能地集中在前幾個(gè)學(xué)期中但不能超過學(xué)分上限limt,那么需要對(duì)同時(shí)符合以下條件(后稱條件2)的K門課程組成的集合的m個(gè)子集進(jìn)行探索:

        (1)入度basesubnum=0(已沒有先修課);

        (2)標(biāo)志位 leaned=0(未修);

        (3)leaned_in_term=0(“0”表示未指定在某學(xué)期學(xué)習(xí))。

        查找某集合的各門課程的學(xué)分之和subcred符合下面兩個(gè)條件(后稱條件3):

        (1)crednum+subcred<=limt;

        (2)設(shè)subcred[i](i=1、2、3···)是符合關(guān)系1的k門課程組成的集合的m個(gè)子集中的n(0

        在符合先修關(guān)系的前提下,為了使學(xué)分高的課程排在前幾個(gè)學(xué)期,需將上述K門課程對(duì)學(xué)分進(jìn)行降序排序,然后按層次從上到下、從左到右生成帶有指向雙親結(jié)點(diǎn)的三叉鏈表。

        如制定第一學(xué)期的教學(xué)計(jì)劃時(shí),由表2可知課程代號(hào)為C13、C17的課程符合上述條件1,則crednum=2+1=3同時(shí)將相應(yīng)leaned置為1。代號(hào)為C1、C9的課程是符合該上述條件2的k(k=2)門課程,對(duì)學(xué)分進(jìn)行降序排序?yàn)椋?/p>

        課程代號(hào): C9C1

        學(xué)分:72

        生成的樹型三叉鏈表如圖2所示。

        可以發(fā)現(xiàn)三叉鏈表的最后一層上的Credit域分別是集合{7,2}的各子集(除空集外)的各門課程的和,由于第二個(gè)結(jié)點(diǎn)的Credit的值(Credit=7)符合條件3,故從此結(jié)點(diǎn)開始順Pare指針向根結(jié)點(diǎn)搜索Credit=7的全部課程,由于第一個(gè)結(jié)點(diǎn)的Post=0,故該結(jié)點(diǎn)沒有加入新課程,順Pare找到第二結(jié)點(diǎn),由于Post=9說明在圖中位置為9的課程可列入本學(xué)期教學(xué)計(jì)劃并將其標(biāo)志位leaned置為1(已修),依次類推直到根結(jié)點(diǎn)止。這樣就得到了第一學(xué)期的教學(xué)計(jì)劃,課程總數(shù)為3門,學(xué)分和為10分(如表1所示)。

        其實(shí),符合上述條件2的k(k=2)門課程已經(jīng)對(duì)學(xué)分降序排序,而且三叉鏈表又是按層次從上到下、從左到右生成,所以在建樹的過程中(借助循環(huán)隊(duì)列),如果當(dāng)前結(jié)點(diǎn)的Credit> limt-crednum,則以該結(jié)點(diǎn)為雙親的子樹已經(jīng)與問題無關(guān),不必建造此子樹;一旦發(fā)現(xiàn)當(dāng)前結(jié)點(diǎn)的Credit= limt-crednum就可以提前結(jié)束循環(huán),不必繼續(xù)建樹。后續(xù)學(xué)期如此循環(huán)就可以得到本專業(yè)的教學(xué)計(jì)劃。

        二、算法的主要存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)[1]

        涉及的主要數(shù)據(jù)結(jié)構(gòu):AOE網(wǎng)、帶有指向祖先結(jié)點(diǎn)的三叉鏈表、線性鏈表和循環(huán)隊(duì)列。[2]

        #define max_term_size 12/*學(xué)期總數(shù)不超過12*/

        #define max_sub_size 100/* 課程總數(shù)不超過100*/

        #define max_squ-size 1000/*循環(huán)隊(duì)列最大長(zhǎng)度為1000*/

        /*課程結(jié)點(diǎn)*/

        typedef struct {

        char subno[3];char subname[30];}subnode,subjectlist[20];

        /*專業(yè)結(jié)點(diǎn) */

        typedef struct {

        char deparno[3]; char deparname[20];}deparnode;

        /* 具有相同基礎(chǔ)課的鏈表(先修關(guān)系) */

        typedef struct subrelate {

        int subre; struct subrelate *nextsub; }subjectrelatenode,*subjectrelate;

        /*課程信息結(jié)點(diǎn)(鄰接表存儲(chǔ)結(jié)構(gòu)) */

        typedef struct subjectmes {

        subnode sub;/*課程結(jié)點(diǎn) */

        int credit,basesubnum,leaned_in_term,leaned; /*標(biāo)志位:0為未學(xué),1為已學(xué) */

        subjectrelate firstbasesub; }subjectnode[max_sub_size];

        /* 專業(yè)信息結(jié)點(diǎn)*/

        typedef struct departmes {

        deparnode depart;/*專業(yè)結(jié)點(diǎn)*/

        inttermnum,subjectnum,limt;/*學(xué)分上限*/

        subjectnode subject;}depart_mes_node;

        /*存儲(chǔ)指定某個(gè)學(xué)期學(xué)習(xí)的課程的線性鏈表 */

        typedef struct sub {

        int subno; struct sub * next; } *plist;

        /*帶有指向祖先結(jié)點(diǎn)的三叉樹*/

        typedef struct bitree {

        int cred,int post;struct bitree *lch,*rch,*pare; }*tpstr;

        /*循環(huán)隊(duì)列*/

        typedef struct seq {

        int fore,rear; struct bitree *sub[max_squ_size];} cycsqu;

        后面的算法以上述結(jié)構(gòu)定義為準(zhǔn)。

        三、算法實(shí)現(xiàn)

        為了說明問題,本文僅給出主要算法pro_plan_instru(),而數(shù)據(jù)的輸入函數(shù)input()讀者可以自行編寫。主要程序代碼如下(用C語(yǔ)言編寫):[3]

        depart_mes_node department;

        { int i,j,k,m,exch,subnum,crednum,crednum1,subcred,credsort[max_sub_size];

        int count,n,max; subjectrelate ts;plist p,q; tpstr tp,tq;cycsqu plan;

        printf(\"\following is the plan instructure for department of %s:\\",department.depart.deparname);

        for(i=1;i<=department.termnum;++i) /*開始制定department.termnum個(gè)學(xué)期的計(jì)劃*/

        {p=0;crednum=0;subnum=0;k=0; count=0; subcred=0;

        for(j=1; j<=department.subjectnum;++j) /*選擇指定第i個(gè)學(xué)期學(xué)習(xí)的課程*/

        {if(department.subject[j].leaned_in_term==i)

        { department.subject[j].leaned=1; q=(struct sub *)malloc(sizeof(struct sub));

        q->subno=j;q->next=p; p=q;crednum+=department.subject[j].credit;}

        if(!(department.subject[j].leaned_in_term)department.subject[j].basesubnum<=0)!(department.subject[j].leaned))

        { ++k; credsort[k]=j;}

        }

        subcred=department.limt-crednum;

        for(m=1;m<k;++m)

        {for(j=1;j<k-m+1;++j)

        if(department.subject[credsort[j]].credit<department.subject[credsort[j+1]].credit)

        { exch=credsort[j];credsort[j]=credsort[j+1];credsort[j+1]=exch; }

        }

        tp=(struct bitree*)malloc(sizeof(struct bitree)); tp->cred=0; tp->post=0; tp->lch=0; tp->rch=0; tp->pare=0; plan.fore=0; plan.rear=0;

        if(k) /*如果符合條件3的課程總數(shù)k>0生成三叉鏈表*/

        plan.sub[plan.rear]=tp; plan.rear=(plan.rear+1)% max_squ-size;count=1; /*三叉鏈表第j層的結(jié)點(diǎn)數(shù)*/

        for(j=1;j<=k; ++j)

        {n=count; count=0;

        for(m=1;m<=n;++m)

        {tp=plan.sub[plan.fore];plan.fore=(plan.fore+1)%max_squ-size; crednum1=tp->cred+department.subject[credsort[j]].credit;

        if(crednum1<=subcred)

        {tq=(structbitree*)malloc(sizeof(structbitree));

        tq->pare=tp;tq->lch=0;tq->rch=0;tq->cred=crednum1;tq->post=credsort[j];tp->lch=tq;plan.sub[plan.rear]=tq;plan.rear=(plan.rear+1)% max_squ-size;++count;

        }

        if(crednum1==subcred)

        {

        tp=tq; printf(\"%d\\",department.subject[tp->post].credit); goto equal;

        }

        tq=(structbitree*)malloc(sizeof(structbitree));

        tq->pare=tp;tq->lch=0;tq->rch=0;tq->cred=tp->cred;

        tq->post=0;tp->rch=tq; ++count;

        plan.sub[plan.rear]=tq;plan.rear=(plan.rear+1)% max_squ-size;

        }

        }

        equal:

        if(subcred!=crednum1)

        {plan.fore=(plan.rear-count+ max_squ-size)% max_squ-size;max=0;

        for(;plan.fore<=count; ++plan.fore)

        if((plan.sub[plan.fore]->cred<subcred)(plan.sub[plan.fore]->cred>max))

        {max=plan.sub[plan.fore]->cred;tp=plan.sub[plan.fore]; }

        }

        printf(\"term%2d:\\\",i); count=0;n=0;

        while(p)

        {printf(\"%s:%d: ,department.subject[p->subno].sub.subno,department.subject[p->subno].credit);

        ++count;n+=department.subject[p->subno].credit; q=p;p=p->next; free(q);

        }

        if(k)

        { while(tp)

        {if(tp->post!=0) {printf(\"%s:%d\",department.subject[tp->post].sub.subno,department.subject[tp->post].credit);

        ++count;n+=department.subject[tp->post].credit;department.subject[tp->post].leaned=1;

        ts=department.subject[tp->post].firstbasesub;

        while(ts)

        { department.subject[ts->subre].basesubnum;ts=ts->nextsub; }

        }tq=tp; tp=tp->pare; free(tq);

        }

        }

        printf(\"\subjectnum:%dcreditnum:%d\\",count,n);

        }

        }

        四、算法測(cè)試及結(jié)果分析

        輸入數(shù)據(jù)如表2所示,打印結(jié)果如下:

        following is the plan of instructure for department of software:

        term 1: C17:1 C13:2 C09:7 subjectnum:3 creditnum:10

        term 2: C18:1 C14:2 C01:2 C10:5subjectnum:4 creditnum:10

        term 3: C19:1 C15:2 C11:2 C04:2 C02:3 subjectnum:5 creditnum:10

        term 4: C16:2 C06:3 C03:4 subjectnum:3creditnum:9

        term 5: C05:2 C12:3 C08:4 subjectnum:3creditnum:9

        term 6: C07:4 subjectnum:1 creditnum:4

        term 7: subjectnum:0 creditnum:0

        term 8: subjectnum:0 creditnum:0

        由打印結(jié)果可知第1~3學(xué)期學(xué)分總數(shù)均為10分,達(dá)到學(xué)分上限值,第4、5學(xué)期學(xué)分總數(shù)均為9分,第6學(xué)期學(xué)分總數(shù)為4分,第7、8學(xué)期學(xué)分總數(shù)均為0分。說明該算法完全符合課程盡可能地集中在前幾個(gè)學(xué)期中但不能超過學(xué)分上限的要求;而且學(xué)分大的課程在先修關(guān)系約束的前提下集中在前幾個(gè)學(xué)期中,如代號(hào)為C9、學(xué)分為7的課程在第1學(xué)期學(xué)習(xí),代號(hào)為C10、學(xué)分為5的課程在第2學(xué)期學(xué)習(xí)。所以該設(shè)計(jì)思想基本上符合普通高校教學(xué)計(jì)劃編制的要求,可作為解決教學(xué)計(jì)劃編制及類似問題的軟件人員的參考。

        五、結(jié)束語(yǔ)

        通過仿真實(shí)驗(yàn),表明本文提出的計(jì)算機(jī)輔助教學(xué)計(jì)劃編制的實(shí)現(xiàn)方法在精確性和其他性能方面是可行的。由于算法是用傳統(tǒng)的數(shù)學(xué)方法實(shí)現(xiàn)的,故該系統(tǒng)缺乏智能性,容錯(cuò)性較差,這將在以后的研究工作中逐步解決。

        參考文獻(xiàn):

        [1]王珊編著.數(shù)據(jù)組織與管理[M].北京:經(jīng)濟(jì)科學(xué)出版社,1999.

        [2]嚴(yán)蔚敏,吳偉民編著.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].北京:清華大學(xué)出版社,1997.

        [3]譚浩強(qiáng)編著.C語(yǔ)言程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,1999.

        亚洲第一区二区精品三区在线| 乱人伦中文字幕在线不卡网站 | 中文字幕精品人妻丝袜| 国产丝袜美腿精品91在线看| 国语对白做受xxxxx在线| 国产一区二区三区在线观看精品| 18禁国产美女白浆在线| 久久亚洲网站中文字幕| 强开少妇嫩苞又嫩又紧九色| 成人无码一区二区三区网站 | 日本二区三区视频免费观看| 久久综合久久综合久久| 国内成+人 亚洲+欧美+综合在线| 大地资源网更新免费播放视频| 最新永久免费AV网站| 日本午夜精品一区二区三区| 人妻中文字幕无码系列| 亚洲午夜精品久久久久久人妖| 中文字幕色视频在线播放| 日本最新一区二区三区在线| 亚洲热线99精品视频| 亚洲香蕉视频| 午夜国产小视频在线观看黄| 国产一区二区视频免费在| 亚洲精品suv精品一区二区| 国内精品伊人久久久久av| 美女把内衣内裤脱了给男人舔| 日韩经典午夜福利发布| 人妻少妇看a偷人无码精品| 亚洲国产欧美久久香综合| 久久99精品综合国产女同| 亚洲无线码一区二区三区| 久久亚洲黄色| 肉丝高跟国产精品啪啪| 偷拍偷窥女厕一区二区视频| 日本熟妇色xxxxx欧美老妇| 老熟女熟妇嗷嗷叫91| av天堂网手机在线观看| 久久久亚洲精品一区二区三区| 亚洲肥老熟妇四十五十路在线| 亚洲中文字幕熟女五十|