就咁應該得
  1. for (i1 = 1; i1 <= 44; i1++) {
  2.         for (i2 = i1 + 1; i2 <= 45; i2++) {
  3.                 for (i3 = i2 + 1; i3 <= 46; i3++) {
  4.                         for (i4 = i3 + 1; i4 <= 47; i4++) {
  5.                                 for (i5 = i4 + 1; i5 <= 48; i5++) {
  6.                                         for (i6 = i5 + 1; i6 <= 49; i6++) {
  7.                                                 ...;}
  8.                                 }
  9.                         }
  10.                 }
  11.         }
  12. }
複製代碼

TOP

就咁應該得
hk8guy 發表於 16-4-2019 12:09


就題目而言,呢個係蠢既方法
快既方法去搵recursion

TOP

就題目而言,呢個係蠢既方法
快既方法去搵recursion
天下無雙 發表於 2019-4-16 19:59


冇錯, 呢個完全係brute force

TOP

就咁應該得
hk8guy 發表於 2019-4-16 12:09



    請受小弟一拜,一開始我都係咁寫,只係錯左一步就愈寫愈錯,依家明白果一步錯左咩

TOP

本帖最後由 marlin12 於 2019-4-16 21:42 編輯
就題目而言,呢個係蠢既方法
快既方法去搵recursion
天下無雙 發表於 2019-4-16 19:59

雖然我都唔覺得[hk8guy]師兄的方法好,但是他的方法確實比recursion快很多。

[hk8guy]師兄的方法,用咗1275ms。
  1. console.time('elapsed');

  2. const patterns = [];

  3. for (let i1 = 1; i1 <= 44; i1++) {
  4.   for (let i2 = i1 + 1; i2 <= 45; i2++) {
  5.     for (let i3 = i2 + 1; i3 <= 46; i3++) {
  6.       for (let i4 = i3 + 1; i4 <= 47; i4++) {
  7.         for (let i5 = i4 + 1; i5 <= 48; i5++) {
  8.           for (let i6 = i5 + 1; i6 <= 49; i6++) {
  9.             patterns.push( [i1, i2, i3, i4, i5, i6] );
  10.           }
  11.         }
  12.       }
  13.     }
  14.   }
  15. }

  16. console.timeEnd('elapsed');
複製代碼
recursion方法,用咗6537ms。
  1. function combinations( n, r ) {
  2.   const pattern = [],
  3.         patterns = [];

  4.   function worker( begin, end, offset ) {
  5.     for( let x = begin; x <= end; x++ ) {
  6.       pattern[offset] = x;

  7.       if( offset === r - 1 ) {
  8.         patterns.push( pattern.slice() );
  9.       } else {
  10.         worker( x + 1, end + 1, offset + 1 );
  11.       }
  12.     }
  13.   }

  14.   worker( 1, n - r + 1, 0 );

  15.   return patterns;
  16. }

  17. console.time('elapsed');
  18. const results = combinations(49, 6);
  19. console.timeEnd('elapsed');
複製代碼

TOP

雖然我都唔覺得[hk8guy]師兄的方法好,但是他的方法確實比recursion快很多。

[hk8guy]師兄的方法,用咗12 ...
marlin12 發表於 2019-4-16 21:38



    recursion 係最精簡, 但係慢.
所以如果要好有效率既情況, 可能hard code 直接行係最快. 吾 call function / call 自己

TOP

平行佢啦

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP