成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

有關(guān)排列組合的一道算法題

ephererid / 1107人閱讀

摘要:有關(guān)排列組合的一道算法題一題目?jī)?nèi)容廢話不多說,先上題目有一個(gè)的網(wǎng)格,左下角為,右上角為,規(guī)定每次只能走一步,并且方向只能是向上或者向右,求到共有多少種走法例如一個(gè)日字形的格子就是一個(gè)的網(wǎng)格,共有種走法并用寫出程序算法。

有關(guān)排列組合的一道算法題 一、題目?jī)?nèi)容

廢話不多說,先上題目:

有一個(gè) n × m 的網(wǎng)格,左下角為A,右上角為B,規(guī)定每次只能走一步,并且方向只能是向上或者向右,求A到B共有多少種走法?(例如一個(gè)日字形的格子就是一個(gè)2 × 1的網(wǎng)格,共有3種走法)并用Javascript寫出程序算法。

大家可以先思考一下怎么做,再去看我的方法。

二、解決方法

這個(gè)問題我想了很久,一直在走彎路,其實(shí)用一個(gè)抽象的數(shù)學(xué)方法就可以很輕松解決這個(gè)問題。

現(xiàn)在你可以把向右移動(dòng)想象成記錄一個(gè)數(shù)字1,把向上移動(dòng)抽象成記錄一個(gè)數(shù)字0,并且這些數(shù)字是按順序排列的。

看到這里我相信聰明的小伙伴已經(jīng)想到了如何解決這個(gè)問題。

這個(gè)問題可以抽象成n個(gè)0和m個(gè)1的不同排列的總數(shù)。比如2 × 2的網(wǎng)格就是2個(gè)0和2個(gè)1的所有不同排列的數(shù)量,也就是1100,1010,1001,0110,0101,0011。

進(jìn)而,我們可以把問題抽象成從(m + n)個(gè)0中,隨意抽取m個(gè)0并將它改為1的不同方法數(shù),是不是覺得問題很熟悉,沒錯(cuò)!就是高中的排列組合。我先把公式亮出來?:

C(m, n + m) = (n + m)!/(m! * n!)

想先復(fù)習(xí)一下排列組合知識(shí)的同學(xué)可以參見下一節(jié)。

三、Javascript代碼描述

以上的結(jié)果用JS的描述,如下:

function getMethods(n, m) {
  // 定義一個(gè)求階乘的輔助函數(shù)
  function factorial(x) {
    if (x === 0) {
      return 1
    } else {
      return factorial(x -1) * x
    }
  }
  return factorial(m + n)/(factorial(m) * factorial(n))
}

如果小伙伴有好的算法,可以留言交流!

四、排列組合

簡(jiǎn)單地講一下排列和組合。

排列

先舉個(gè)栗子(以下n,m均為正整數(shù)),從n個(gè)含有標(biāo)有不同數(shù)字小球的袋子里,按順序抽取n個(gè)小球,且抽取后不再放入袋子里。第一次抽的時(shí)候,有n種可能;第二次抽的時(shí)候有n - 1種可能,以此類推,抽完n個(gè)小球總共的不同排列個(gè)數(shù)為n!。

如果條件不變,只把抽取的小球個(gè)數(shù)改為m(m <= n)個(gè),結(jié)果也就變成:

n × (n - 1) × (n - 2) × ... × (n - m + 1)
整理一下即:
A(m, n) = n! / (n - m)!
組合

同樣是n個(gè)標(biāo)記不同數(shù)字的小球放入一個(gè)袋子中,也是抽取m個(gè),但是此時(shí)不算抽取的順序。也就是把排列的結(jié)果n!/(n - m)!再除以m個(gè)小球隨機(jī)排列的總方法術(shù),即m!,所以結(jié)果為:

C(m, n) = A(m, n) / m! = n! / ( (n - m)! × m! )
如何得出之前的公式

運(yùn)用以上的知識(shí),可以總結(jié)出以下公式:

C(m, n + m) = A(m, n + m) / m!

            = (n + m)! / ( n! × m! )

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/84327.html

相關(guān)文章

  • 一道算法(next smaller)

    摘要:從位向右,找到比小的最大的那個(gè)數(shù),并與交換。交換后,把位向右注意是的,不是的值的所有數(shù)字降序排列。對(duì)于來說,從右向左可以分割為,,,這三種情況都是最小排列。 題目如下: 給定某一個(gè)正整數(shù),組成這個(gè)數(shù)的數(shù)字不變,返回下一個(gè)比它小的數(shù),如: nextSmaller(21) == 12 nextSmaller(531) == 513 nextSmaller(907) == 790 nextS...

    mgckid 評(píng)論0 收藏0
  • 一篇算法講解注解

    摘要:前言從公式到算法之前的完整路徑應(yīng)該是數(shù)學(xué)公式中文公式中文算法英文算法偶然看到一篇算法文章,講解了百度校園招聘之編程題的核心算法思路,我根據(jù)它又整理出自己的解題思路。 前言 從公式到算法之前的完整路徑應(yīng)該是:數(shù)學(xué)公式->中文公式->中文算法->英文算法 偶然看到一篇算法文章,講解了百度2016校園招聘之編程題的核心算法思路,我根據(jù)它又整理出自己的解題思路。 第一題 題目在原文中可以找到,...

    fevin 評(píng)論0 收藏0
  • 前端空間 - 收藏集 - 掘金

    摘要:封裝手寫的方筆記使用檢測(cè)文件前端掘金副標(biāo)題可以做什么以及使用中會(huì)遇到的坑。目的是幫助人們用純中文指南實(shí)現(xiàn)復(fù)選框中多選功能前端掘金作者緝熙簡(jiǎn)介是推出的一個(gè)天挑戰(zhàn)。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測(cè)試框架 Chai.js 源碼貢獻(xiàn)者之一,Chai.js 中會(huì)遇到很多異常處理...

    you_De 評(píng)論0 收藏0
  • 前端空間 - 收藏集 - 掘金

    摘要:封裝手寫的方筆記使用檢測(cè)文件前端掘金副標(biāo)題可以做什么以及使用中會(huì)遇到的坑。目的是幫助人們用純中文指南實(shí)現(xiàn)復(fù)選框中多選功能前端掘金作者緝熙簡(jiǎn)介是推出的一個(gè)天挑戰(zhàn)。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測(cè)試框架 Chai.js 源碼貢獻(xiàn)者之一,Chai.js 中會(huì)遇到很多異常處理...

    lwx12525 評(píng)論0 收藏0
  • 有多少種硬幣組合——找出獨(dú)特子數(shù)組之和

    摘要:另外,我們還需要將所有硬幣組合起來,組成一個(gè)新的數(shù)組,其中包含了所有的硬幣。比如硬幣數(shù)組,和代表其數(shù)量的數(shù)組,組合成。 寫在前面的自我檢討 這道題的解法,剛開始我自己做的并不算是一個(gè)很好的解法,只能說題目是做出來了,但過程中的計(jì)算有大量的重復(fù)計(jì)算,導(dǎo)致函數(shù)復(fù)雜度直逼O(n^n)。查閱資料之后便有了一個(gè)改良版。感謝這篇文章Find all distinct subset (or subs...

    xiaoqibTn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<