簡體   English   中英

生成一系列數字范圍內的所有置換的序列

[英]Generate a sequence of all permutation of some range of numbers

給出了以下算法,我們應該用Java編寫它。 但是,當我嘗試逐行理解時,會感到困惑,尤其是其中的一部分:

A [k + 1:N-1] = S中的值按升序排列

據我了解,該集合隨時只有1個數字。 當集合只有1個數字時,我們如何替換A[k+1:N-1]

假設A是一個從0N-1的整數序列(按升序排列)(假設其為int[N]數組)。

next_permutation(A):
    k = N-1
    S = { }
    while k >= 0:
        if S contains a value larger than A[k]:
            v = the smallest member of S that is larger than A[k]
            remove v from S
            insert A[k] in S
            A[k] = v
            A[k+1:N-1] = the values in S in ascending order.
            return true
        else:
            insert A[k] in S
            k -= 1
    return false

所顯示的算法與按字典順序Generation相似。 您可以閱讀該文章以獲取更多信息。

@templatetypedef關於如何用集合中的值升序替換數組中項目的任何線索? 例如A [k + 1:N-1] = S中的值按升序排列。 我應該使用toArray()嗎?

不需要。 您可以嘗試使S數組始終保持排序。 每次您想在數組中插入一個新數字時,都將其插入其中,這樣數組就可以保持排序。 例如,如果到目前為止您有S = [5 7 8]並想插入6 ,則在5和7之間插入S = [5 6 7 8] 這樣,替換步驟就是將元素從S復制到A [k + 1:N-1]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM