999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

算法在程序中的應用

2019-09-10 07:22:44王學梅
現代信息科技 2019年22期

摘? 要:算法是用于解決一個實際問題而采取的方法或思路,通過自然語言、流程圖的方式可以將算法實現的基本步驟和流程表示出來。算法具有有窮性、確定性、有效性等特點,對于同一個問題,其實現的算法可以有多個。一般為了有效地解決實際問題,不僅要保證算法正確,還要考慮到算法的質量,所以選擇一個合適的算法尤其重要。在進行了算法的表示之后,可以利用相應的程序設計語言將算法實現,最終解決實際問題。

關鍵詞:算法;程序設計;線段分割

中圖分類號:TP311.1? ? ? 文獻標識碼:A 文章編號:2096-4706(2019)22-0107-03

Abstract:The algorithm is a method or idea used to solve a practical problem. Through the natural language and flow chart,the basic steps and processes of the algorithm can be expressed. The algorithm has the characteristics of poverty,certainty,validity,etc. For the same problem,there are many algorithms that can be implemented. In general,in order to effectively solve practical problems,not only to ensure the correctness of the algorithm,but also to consider the quality of the algorithm. Therefore,it is particularly important to choose a suitable algorithm. After the representation of the algorithm,we can use the corresponding programming language to implement the algorithm and finally solve the actual problem.

Keywords:algorithm;program design;segment segmentation

0? 引? 言

算法是解題的基本思路和方案,是對一個問題的準確而完整的表述,可以是一系列指令或流程框圖,也可以是自然語言。同一個問題有很多種解決方法,也就產生了多個算法。而算法的優劣直接影響到程序的執行效率。所以,設計一個優秀的算法對于程序設計至關重要。

1? 算法與程序設計的關系

一個好的程序設計,必然存在一個最優的算法設計。算法是程序設計的核心,算法的好壞在很大程度上決定了一個程序的效率。一個好的算法可以降低程序運行的時間復雜度和空間復雜度,先選出一個好的算法,再配合以一種適宜的數據結構,這樣程序的效率會大大提高。一個程序的設計包含數據結構和算法兩部分,其中數據結構是程序的中心,是設計程序的底層,而算法則是圍繞一定的數據結構來進行操作,所以要進行利用程序設計解決實際問題之前,應首要選擇正確的數據結構,然后基于此結構再設計合適的算法,選擇合理的算法實現。比如,在一個學生表的基本操作中,往往會涉及一些學生信息的增、刪、查、改操作,在這類操作中就有數組和鏈表兩種數據結構和基于兩種結構的不同算法。其中數組結構會因為增加、刪除操作移動大量的元素,導致運行效率降低。而鏈表結構直接修改相應的指針指向就能夠高效地完成該操作,所以在程序設計解決此類問題的時候,會選擇鏈表結構,并基于此結構進行算法的設計。

2? 算法的表示

要將算法的思路和基本步驟表示出來,常用的方法有:自然語言、流程圖和偽代碼等。自然語言是采用漢語、英語或其他語言的方式,表述通俗易懂,但表示方法不嚴格,對于一些分支、循環的算法表示出來不太方便,這種方式一般不常用。流程圖是用圖框的形式表示各種操作,包括傳統流程圖和N-S結構化流程圖,傳統流程圖利用不同的圖框表達不同的含義,常用的圖框表示符號如圖1所示。例如表示1+2+3+…+10的和,可以用傳統流程圖表示,如圖2所示。

N-S流程圖去掉了帶箭頭的流程線,將算法寫在了一個矩形框內,這個矩形框還可以包含其他的從屬于它的框。其包含順序結構、選擇結構和循環結構三種結構,分別以圖3(a)—(d)的形式表示。

1+2+3+…+10的和用N-S流程圖表示如圖4所示。

流程圖的表示方式雖然直觀易懂,但繪制稍微復雜,并且當遇到復雜的程序設計時,會進行反復修改,為了更方便地設計算法,常用偽代碼表示復雜的算法。偽代碼用介于自然語言和計算機語言之間的文字和符號表示算法。仍以1+2+3+…+10的和為例,用偽代碼表示:

有了以上表示算法的幾種方式,對于提出的實際問題首先通過流程圖或偽代碼的形式表達出算法的基本思路,然后利用編程語言將算法表示出來。

3? 應用線段分割算法實現微信紅包隨機發放

要給10個人隨機發放50元的紅包,要求紅包最小不能低于0.01元,每個紅包保留2位小數。針對此實際問題,提出了多種方法,目前用得較多的是二倍均值法和線段切割法。其中二倍均值法保證了每次隨機金額的平均值是公平的。例如,對于第1人:50/10*2,隨機范圍為(0,10),平均可以搶到5元。

對于第2人:45/9*2,隨機范圍為(0,10),平均可以搶到5元。

以此類推,這樣每次隨機的范圍均值都是一樣的,但這種方式并不是真正的隨機數。而線段分割法的原理則是將紅包的總額當成是一條長度為紅包金額的線段,將紅包隨機拆分成若干條子線段,每個子線段的長度即為紅包的金額。這里有10個人,那就需要確定9個切割點。所以首先要進行切割點的確定,然后將各個相鄰切割點之間的距離求出,即為隨機的紅包金額。為了滿足紅包最小不能低于0.01和紅包保留2位小數,先將紅包金額*100,這樣相當于線段的長度為5000,將其分割刻度設置為1。在確定好分割點后,求出相鄰分割點的距離并除以100,得出隨機的金額,保留2位小數。

begin

50=>money

10=>n

(int)(money*100)=>point

List<Integer>? list=new ArrayList<>()可以用鏈表也可以用數組

list.add(0)

list.add(point)

while(list.size()<=n)將線段進行分割,確定分割點坐標

{

(int)(Math.random()*money)=>p

if(list.contains(p))

continue

list.add(p)

}

Collections.sort(list)將分割點坐標按大小排序,數組可以使用Arrays類

0=>i

while(i<n)

{

(list.get(i+1)-list.get(i))/100=>x

print x? ? ? ? 輸出搶到的紅包金額

}

end

有了算法的基本表示,該問題的解決思路也就明了了,這里將該算法用Java來實現,部分的代碼設計如下:

首先定義一個方法,該方法用于實現金額為money,紅包個數為n的隨機方法功能。該方法的代碼:

int[] fun(double money,int n) {

int x=(int)(money*100);

int[] xx=new int[n+1];//利用數組的形式實現

int[] yy=new int[n];

xx[0]=0;

xx[n]=x;

int i=1;

while(i<n) {

int r=(int)(Math.random()*x)+1;

if(r>=1) {

if(!query(r,xx)) {

continue;

}

xx[i]=r;

i++;

}

}

java.util.Arrays.sort(xx);

//排序完成后,將每相鄰的兩個分割點之間的距離求出即為紅包的隨機數。

for(i=0;i<xx.length-1;i++) {

yy[i]=(xx[i+1]-xx[i]);

}

return yy;

}

這里調用了一個自定義的方法query,用于查詢數組中是否已經包含該分割點。query()的功能如下:

boolean? query(int x,int[] z) {

int i=0;

for(;i<z.length;i++)

{

if(x==z[i])

break;

}

if(i>=z.length) {

return true;

}

return false;

}

注:如果用鏈表List類框架實現的話,該框架中包含有contains(),用于判定是否在鏈表中已有該數據,如果有的話則返回true,否則返回false。

這樣就可以直接調用該方法以保證分割點的坐標不重復。

最后在主方法中調用fun()方法即可,如:int x[]=fun (50,10);語句即可將50元隨機發放給10個人,然后再除以100獲取實際的金額數,并利用BigDecimal類設置該金額保留兩位小數,至此隨機發放紅包金額的問題得以解決。

4? 結? 論

本文首先闡述了算法在程序中的作用,明確了算法是程序設計中的核心地位,在程序設計中起著至關重要的作用,然后描述了算法的表示方式,以傳統流程圖和N-S流程圖為例完成了算法的設計過程,最后結合實際的微信紅包應用案例描述了算法在程序設計中的重要性。在實際的程序開發中,算法的好壞直接決定了程序設計的運行效率。所以我們一定要結合實際的數據結構,確立優秀的算法思路,以保證程序的高效執行。

參考文獻:

[1] 楊克昌.計算機常用算法與程序設計教程 [M].北京:人民郵電出版社,2008.

[2] 譚浩強.C程序設計:第5版 [M].北京:清華大學出版社,2017.

[3] 顧民.程序設計中的算法優化思考 [J].中國新通信,2018,20(1):65.

作者簡介:王學梅(1979.08-),女,漢族,山東德州人,教師,講師,碩士,研究方向:數據庫應用、軟件開發。

主站蜘蛛池模板: 55夜色66夜色国产精品视频| 久久久久人妻一区精品色奶水| 伊人成人在线| 美女内射视频WWW网站午夜| 久久精品无码一区二区国产区| 蜜芽一区二区国产精品| 欧美激情视频一区| 欧美日韩午夜| 欧美特级AAAAAA视频免费观看| 欧美有码在线| 国产乱人乱偷精品视频a人人澡| 欧美在线三级| 2021国产v亚洲v天堂无码| 久久综合一个色综合网| 久久亚洲高清国产| 在线看片国产| 国产日本欧美在线观看| 欧美怡红院视频一区二区三区| 无码国产偷倩在线播放老年人| 日韩东京热无码人妻| 91久久偷偷做嫩草影院精品| 日韩精品毛片人妻AV不卡| 国产真实乱了在线播放| 欧美在线精品怡红院| 日韩毛片免费观看| 国产精品青青| 精品伊人久久久大香线蕉欧美 | 国产一区二区网站| 97se亚洲综合在线天天| 久久婷婷人人澡人人爱91| 国产精品太粉嫩高中在线观看 | 午夜视频www| 欧美一级高清片久久99| 中文字幕无码av专区久久| 国产极品美女在线观看| 国产精品蜜芽在线观看| 日本不卡在线| 午夜色综合| 亚洲中文无码av永久伊人| 99在线视频免费| 91国内视频在线观看| 成人免费午间影院在线观看| 欧美一级夜夜爽www| 亚洲成人精品| 欧美啪啪网| 日本成人不卡视频| 国产高清国内精品福利| 无码一区18禁| 国产精品亚洲αv天堂无码| 成人福利在线观看| 91美女视频在线观看| 日本不卡视频在线| 日韩精品成人在线| 国产欧美专区在线观看| yjizz视频最新网站在线| 欧美、日韩、国产综合一区| 亚洲中字无码AV电影在线观看| 国产丝袜丝视频在线观看| 在线看国产精品| 天天躁日日躁狠狠躁中文字幕| 干中文字幕| 国产在线精彩视频二区| 国产免费看久久久| 亚洲bt欧美bt精品| 欧美成人综合视频| 久久久久人妻一区精品| 国产自在线播放| 国产精品久久自在自2021| 天天色天天综合| 成人夜夜嗨| 国产精品青青| 免费一级大毛片a一观看不卡| 亚洲高清日韩heyzo| 中字无码av在线电影| 国产精品香蕉在线观看不卡| 欧美中文一区| 青青热久麻豆精品视频在线观看| 欧美特黄一级大黄录像| 亚洲国产AV无码综合原创| 九九热精品视频在线| 亚洲欧美日本国产综合在线| 四虎成人在线视频|