最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#遞歸算法之分而治之策略

 更新時間:2016年06月15日 11:39:26   作者:張玉彬  
分而治之的策略主要是將大量復雜的問題分成多個子問題,解決各個子問題,從而解決原問題,下面就讓我們看看具體如何實現(xiàn)。

1.分而治之的概念    

  分而治之是一種使用遞歸解決問題的算法,主要的技巧是將一個大的復雜的問題劃分為多個子問題,而這些子問題可以作為終止條件,或者在一個遞歸步驟中得到解決,所有子問題的解決結合起來就構成了對原問題的解決

2.分而治之的優(yōu)點和缺點

  分而治之算法通常包括一個或者多個遞歸方法的調用,當這些調用將數(shù)據(jù)分隔成為獨立的集合從而處理較小集合的時候,分而治之的策略將會有很高的效率,而在數(shù)據(jù)進行分解的時候,分而治之的策略可能會產生大量的重復計算,從而導致性能的降低。

3.畫標尺程序的分析講解

  畫標尺是分而治之的策略的一個簡單應用,標尺是由長度為1英寸的單元構成的序列,每個單元的末端有最長的記號,每個寸單元的1/2英寸處的記號要比末端的短,在1/4處的記號比1/2的要短,1/8處比1/4處短,編寫一個程序,在一條線上,用規(guī)則間隔來繪制標記,在特定位置有特定大小的記號。

  分析:在一個直線上,我們可以首先將這條直線一分為二,然后對分出來的二個再進行拆分。直到滿足一定的精度要求,比如以最小刻度為1/8英寸為例,drawRuler作為畫標尺的第歸函數(shù),在drawRuler函數(shù)中用一段線段的兩端(起點(startPos),終點(endPos)),和變量h作為參數(shù),標記的基礎高度為baseHeight,而標記的高度應該為h*baseHeight,則標尺的畫法可以分析如下:

  計算間隔(0.0,1.0)的中點:midPos = (startPost+endPos)/2;在中點1/2處畫一個標記,高度為3*baseHeight

  將中點分隔開的為兩條直線,再使用第歸函數(shù)drawRule,對應的起點,終點為(0.0,0.5)和(0.5,1.0),參數(shù)h-1,這樣可以使高度相比短些

  第歸步驟2(h=2)

  midPos = (0.0+0.5)/2   (1/4處),高度為 2*baseHeight

  midPos = (0.5+1.0)/2   (3/4處)高度為 2*baseHeight

  第歸步驟(h=1)

  分別在1/8處和7/8處標記,計算方法

  midPos = (0.0+0.25)/2  (1/8)    高度為baseHeight

  midPos = (0.75+1)/2  (7/8)     高度為baseHeight

  用圖示可以表示如下

http://img.jbzj.com/file_images/article/201606/2016061511392912.jpg

http://img.jbzj.com/file_images/article/201606/2016061511392913.jpg

http://img.jbzj.com/file_images/article/201606/2016061511392914.jpg

  我們可以將連續(xù)第歸產生的記號看作二叉樹的節(jié)點。樹根h為初值。就是1/2處的記號,每個父記號都產生了兩個子記號。如下圖所示

http://img.jbzj.com/file_images/article/201606/2016061511392915.jpg

4.可執(zhí)行程序文件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DrawRuler
{
 public partial class Form1 : Form
 {
 public Form1()
 {
 InitializeComponent();
 }

 private void Form1_Load(object sender, EventArgs e)
 {
 }

 void drawRuler(float startPos, float endPos, int h)
 {
 float baseHeight =4;
 if (h > 0)
 {
 float midPos = (startPos + endPos) / 2;
 float height = h * baseHeight;
 drawMark(midPos, height);
 drawRuler(startPos, midPos, h - 1);
 drawRuler(midPos, endPos, h - 1);
 }
 }

 void drawMark(float pos, float height)
 {
 using (Graphics g = this.CreateGraphics())
 {
 float xOffset = 100 + pos;
 float yOffset = 100-height;
 SolidBrush brusuh = new SolidBrush(Color.Black);
 Pen p = new Pen(brusuh, 1);
 g.DrawLine(p, xOffset, yOffset, xOffset, 100);
 }
 }
 private void Form1_Paint(object sender, PaintEventArgs e)
 {
 #region 首先畫一條直線
 using (Graphics g = e.Graphics)
 {
 float xOffset = 100;
 float yOffset = 100;
 int len = 300;
 SolidBrush brusuh = new SolidBrush(Color.Black);
 Pen p = new Pen(brusuh, 2);
 g.DrawLine(p, xOffset, yOffset, xOffset + len, yOffset);
 }
 #endregion

 drawRuler(0, 300, 3);
 }
 }
}

5.代碼下載
http://xiazai.jb51.net/201606/yuanma/DrawRuler(jb51.net).rar

以上就是本文的全部內容,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C#各種異常處理方式總結

    C#各種異常處理方式總結

    這篇文章介紹了C#各種異常的處理方式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C#數(shù)據(jù)結構揭秘一

    C#數(shù)據(jù)結構揭秘一

    本文一介紹了數(shù)據(jù)結構的基本概念 而介紹了算法的基本概念,并且重點討論了算法時間復雜度,并且用程序予以證明
    2012-10-10
  • C# GetField方法的應用實例講解

    C# GetField方法的應用實例講解

    C#中的GetField是一個反射方法,用于獲取指定類型的字段信息,它可以通過字段名稱來獲取字段對象,并且可以在運行時動態(tài)地訪問和操作這些字段,本文給大家介紹了C# GetField方法的應用,需要的朋友可以參考下
    2024-04-04
  • C#實現(xiàn)員工ID卡的識別功能

    C#實現(xiàn)員工ID卡的識別功能

    這篇文章主要為大家詳細介紹了C#如何實現(xiàn)識別員工ID卡的功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • 你是不是這樣寫異常處理代碼的呢?

    你是不是這樣寫異常處理代碼的呢?

    本篇文章是對,你是不是這樣寫異常處理代碼的進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • WPF彈出自定義窗口的方法

    WPF彈出自定義窗口的方法

    這篇文章主要介紹了WPF彈出自定義窗口的方法,結合實例形式分析了WPF自定義窗口的創(chuàng)建與調用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • c#中合并DataTable重復行的值

    c#中合并DataTable重復行的值

    c#中合并DataTable重復行的值,需要的朋友可以參考一下
    2013-05-05
  • C#語言主要語言區(qū)域

    C#語言主要語言區(qū)域

    這篇文章主要介紹了C#語言主要語言區(qū)域,C#語言區(qū)域主要包括數(shù)組、集合和 LINQ、數(shù)組等,下面文化在哪個內容圍繞這些區(qū)域得相關資料了展開詳情,需要的小伙伴可以參考一下
    2021-12-12
  • Unity實現(xiàn)OCR文字識別功能

    Unity實現(xiàn)OCR文字識別功能

    這篇文章主要介紹了通過Unity接入百度AI接口,實現(xiàn)OCR文字識別功能,文中的實現(xiàn)步驟講解詳細,對我們學習或工作有一定的參考價值,需要的可以了解一下
    2022-01-01
  • Unity使用多態(tài)制作計算器功能

    Unity使用多態(tài)制作計算器功能

    這篇文章主要為大家詳細介紹了Unity使用多態(tài)制作計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

石棉县| 铜陵市| 寻甸| 额尔古纳市| 克拉玛依市| 砚山县| 竹溪县| 宣化县| 腾冲县| 宁波市| 朝阳市| 武胜县| 微博| 郓城县| 高清| 海丰县| 紫云| 南通市| 宁陵县| 南汇区| 长宁县| 密云县| 崇礼县| 蓝田县| 台南市| 旌德县| 三门峡市| 日喀则市| 合水县| 子洲县| 巴林右旗| 尖扎县| 民勤县| 平塘县| 藁城市| 蒙阴县| 鄱阳县| 绥芬河市| 阳信县| 武威市| 乐亭县|