日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

問題內(nèi)容

我想編寫一個函數(shù),將給定的處理程序應(yīng)用于所有輸入排列,而不返回整個排列。

代碼

(在 go 中)

查找排列:

// apply given handler on each combination, and return count only,
func findallpermutationapplyhandler[t any](ts []t, handler func([]t)) int {
    n := 0
    comblist := [][]t{{}} // when empty input, has 1 empty combination, not 0 combination,
    for i := len(ts) - 1; i >= 0; i-- {
        islastlevel := false
        if i == 0 {
            islastlevel = true
        }

        // prefix := ts[0:i]
        mover := ts[i]
        // fmt.printf("\nprefix = %v, mover = %v:\n", prefix, mover)
        var comblist2 [][]t // combinations with an extra item added,
        for _, comb := range comblist {
            for j := 0; j <= len(comb); j++ { // insert mover at index j of comb,
                comb2 := append(append(append([]t{}, comb[0:j]...), mover), comb[j:]...) // new_empty + left + mover + right
                if islastlevel {
                    n++
                    handler(comb2)
                } else {
                    comblist2 = append(comblist2, comb2)
                }
            }
        }

        comblist = comblist2
    }

    return n
}

登錄后復(fù)制

測試用例(簡單)

func TestFindAllPermutationApplyHandler(t *testing.T) {
    assert.Equal(t, FindAllPermutationApplyHandler([]int{1, 2, 3}, func(comb []int) {
        fmt.Printf("\t%v\n", comb)
    }), 6)
}

登錄后復(fù)制

說明

上面的函數(shù) findallpermutationapplyhandler() 可以查找排列,并將給定的處理程序應(yīng)用于每個組合。

但是它需要緩存之前的 n-1 級別(同時最近的 2 個級別)。
我已經(jīng)避免了最終級別的緩存,因為沒有更多級別依賴于它。

問題

    是否可以避免緩存最近2個級別?

    (又名,使空間復(fù)雜度為 o(1)o(n),甚至我猜 o(n^2) 更好)。。

    但這對我來說似乎不可能,因為級別 i 是基于級別 i-1 的,對吧?
    如果是的話,是否有更好的算法來降低空間復(fù)雜度?迭代是首選(而不是遞歸)。

正確答案

聽起來您正在尋找Pandita 算法

這是一種按字典順序迭代生成數(shù)組所有排列的簡單方法。

但是,它要求您可以對數(shù)組的元素進(jìn)行排序。如果不能(因為它們是泛型類型),那么您可以創(chuàng)建所有數(shù)組索引的輔助數(shù)組,并生成其排列。

分享到:
標(biāo)簽:排列
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定