gpt4 book ai didi

algorithm - Mathematica 生成带锁定位的二进制数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:23 25 4
gpt4 key购买 nike

我有一个非常具体的 Mathematica 问题。我正在尝试围绕某些“锁定”位生成所有二进制数。我正在使用字符串值列表来表示哪些位被锁定,例如{"U","U,"L","U"},其中 U 是一个“未锁定”的可变位,L 是一个“锁定的”不可变位。我从一个已格式化的随机二进制数的临时列表开始到前面的列表,例如 {0, 1, 1, 0},其中 1 是锁定位... . 这是我在大学里做的研究。

我正在构建一个以 10 为基数的二进制数列表。我意识到这段代码是完全错误的。这只是一次尝试。

    Do[
If[bits[[pos]] == "U",
AppendTo[returnList, myFunction[bits, temp, pos, returnList]]; ],
{pos, 8, 1}]

myFunction[bits_, bin_, pos_, rList_] :=
Module[{binary = bin, current = Length[bin], returnList = rList},
If[pos == current,
Return[returnList],
If[bits[[current]] == "U",
(*If true*)
If[! MemberQ[returnList, FromDigits[binary, 2]],
(*If true*)
AppendTo[returnList, FromDigits[binary, 2]];
binary[[current]] = Abs[binary[[current]] - 1],
(*If false*)
binary[[current]] = 0;
current = current - 1]; ,
(*If false*)
current = current - 1];
returnList = myFunction[bits, binary, pos, returnList];
Return[returnList]]]

最佳答案

您可以使用元组折叠 只生成您感兴趣的位集。

bits = {"U", "U", "L", "U"};

Fold[
Function[{running, next},
Insert[running, 1, next]], #, Position[bits, "L"]] & /@ Tuples[{0, 1}, Count["U"]@bits]

(*
{{0, 0, 1, 0}, {0, 0, 1, 1}, {0, 1, 1, 0}, {0, 1, 1, 1},
{1, 0, 1, 0}, {1, 0, 1, 1}, {1, 1, 1, 0}, {1, 1, 1, 1}}
*)

希望这对您有所帮助。

关于algorithm - Mathematica 生成带锁定位的二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34501893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com