程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#遞歸算法之分而治之戰略

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

編輯:C#入門知識

C#遞歸算法之分而治之戰略。本站提示廣大學習愛好者:(C#遞歸算法之分而治之戰略)文章只能為提供參考,不一定能成為您想要的結果。以下是C#遞歸算法之分而治之戰略正文


1.分而治之的概念    

  分而治之是一種應用遞歸處理成績的算法,重要的技能是將一個年夜的龐雜的成績劃分為多個子成績,而這些子成績可以作為終止前提,或許在一個遞歸步調中獲得處理,一切子成績的處理聯合起來就組成了對原成績的處理

2.分而治之的長處和缺陷

  分而治之算法平日包含一個或許多個遞歸辦法的挪用,當這些挪用將數據分隔成為自力的聚集從而處置較小聚集的時刻,分而治之的戰略將會有很高的效力,而在數據停止分化的時刻,分而治之的戰略能夠會發生年夜量的反復盤算,從而招致機能的下降。

3.畫標尺法式的剖析講授

  畫標尺是分而治之的戰略的一個簡略運用,標尺是由長度為1英寸的單位組成的序列,每一個單位的末尾有最長的記號,每一個寸單位的1/2英寸處的記號要比末尾的短,在1/4處的記號比1/2的要短,1/8處比1/4處短,編寫一個法式,在一條線上,用規矩距離來繪制標志,在特定地位有特定年夜小的記號。

  剖析:在一個直線上,我們可以起首將這條直線一分為二,然後對分出來的二個再停止拆分。直到知足必定的精度請求,好比以最小刻度為1/8英寸為例,drawRuler作為畫標尺的第歸函數,在drawRuler函數頂用一段線段的兩頭(終點(startPos),起點(endPos)),和變量h作為參數,標志的基本高度為baseHeight,而標志的高度應當為h*baseHeight,則標尺的畫法可以剖析以下:

  盤算距離(0.0,1.0)的中點:midPos = (startPost+endPos)/2;在中點1/2處畫一個標志,高度為3*baseHeight

  將中點分離隔的為兩條直線,再應用第歸函數drawRule,對應的終點,起點為(0.0,0.5)和(0.5,1.0),參數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

  用圖示可以表現以下

https://www.aspphp.online/bianchen/UploadFiles_4619/201707/2017072810463517.jpg

https://www.aspphp.online/bianchen/UploadFiles_4619/201707/2017072810463599.jpg

https://www.aspphp.online/bianchen/UploadFiles_4619/201707/2017072810463581.jpg

  我們可以將持續第歸發生的記號看做二叉樹的節點。樹根h為初值。就是1/2處的記號,每一個父記號都發生了兩個子記號。以下圖所示

https://www.aspphp.online/bianchen/UploadFiles_4619/201707/2017072810463524.jpg

4.可履行法式文件

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

以上就是本文的全體內容,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved