集合元素数量公式

集合元素数量公式,第1张

集合元素数量的的计数公式是crad(A∪B)=crad(A)+crad(B)-crad(A∩B)。两个集合并集的元素个数,等于每个集合的元素个数相加,再减去它们交集的元素个数,原因是被加了两次。

你是说 第三次 再取 和 第一次 不重复的 4个

----------------------------------------

-- func

----------------------------------------

function init_array(n, start)

    start = start or 1

    local arr = {}

    for i = start, n do

        arr[i] = i

    end

    return arr, #arr

end

-- 返回从数组随机抽取的集合

function get_array_randpick(arr, n)

    local a = {}

    for key, var in pairs(arr) do

        a[key] = var

    end

    local t = {}

    local max = #a

    for i = 1, n do

        local x = mathrandom(1, max)

        tableinsert(t, a[x])

        a[x] = a[max]

        a[max] = nil

        max = max - 1

    end

    return t, a

end

--- 计算两个数组的差异

-- @return 数组1中与数组2不相同的元素, 相同的元素 

function get_array_diff(arr, arr_other)

    assert(type(arr) == "table" and type(arr_other) == "table")

    local ht_other = {}

    for i, unit in ipairs(arr_other) do

        ht_other[unit] = true

    end

    local t_diff = {}

    local t_same = {}

    

    for i, unit in ipairs(arr) do

        if ht_other[unit] then     

            tableinsert(t_same, unit)

        else

            tableinsert(t_diff, unit)

        end

    end

    return t_diff, t_same

end

function print_arr(arr, name)

    name = name or "aArray"

    print(name" = {") 

    for i, var in ipairs(arr) do

        print(stringformat("  [%d] = %s", i, tostring(var)))

    end

    print "}"

end

----------------------------------------

-- test

----------------------------------------

local curtime = ostime() 

mathrandomseed(curtime)

mathrandom()

----------------------------------------

-- main

----------------------------------------

local function main()

    local arr_org, len = init_array(9)

    local arr_next = arr_org 

    local arr_last_pick = {}

    

    local loop_max_times = 1000

    

    for i = 1, loop_max_times do

        local arr_pick1, arr_other1 = get_array_randpick(arr_next, 4)

        arr_next = get_array_diff(arr_org, arr_pick1)

        local arr_pick2, arr_other2 = get_array_randpick(arr_next, 3)

        

        if i < 10 then

            print_arr(arr_pick1, stringformat("loop[%d]pick1 = ", i))

            print_arr(arr_pick2, stringformat("loop[%d]pick2 = ", i))

        end

        

        

        local _, t_same = get_array_diff(arr_pick1, arr_pick2)

        assert(#t_same == 0)

        local _, t_same = get_array_diff(arr_pick1, arr_last_pick)

        assert(#t_same == 0)

    

        arr_last_pick = arr_pick1

    end

    

    print("\nok")

end

main()

用乘法定理求解

我们构建集合的子集方法可以分解成x步

1) 决定原集合中的第一个元素在不在子集中,方法有2种

2) 决定原集合中的第二个元素在不在子集中,方法有2种

x) 决定原集合中的第x个元素在不在子集中,方法有2种

根据乘法原理,总得方法有2^x种

以上就是关于集合元素数量公式全部的内容,包括:集合元素数量公式、lua table *** 作、运算、集合个数的计算方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9790789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存