Tag: 算法

有效地生成随机数

你如何有效地生成随机数? 每次随机数程序启动时,它都会像以前一样开始吐出相同的数字。 (我猜是因为随机数生成的准性质) 有没有办法,随机#生成变得不确定? 除了生成之外,引入后生成的数字与最后一个序列的顺序不同。 (随机随机而非准随机) 此外,例如,这种生成的范围是(m,n)使得nm = x,在生成x-1个其他数之后,有可能下次出现数字’p’。 但是接下来很多这样的x数字与最后一个数字的序列不同。 例: 范围:1,5。 代:2,4,5,1,3(第一)4,2,3,1,5(第二)……相同的数字。 我出于困惑的心态写下了这个: int num1 = (rand.Next(1, 440) *31* (int)DateTime.Now.Ticks *59* (DateTime.Now.Second * 100) % 439) + 1; int num2 = (rand.Next(1, 440) *31* (int)DateTime.Now.Ticks *59* (DateTime.Now.Second * 100) % 439) + 1; 这里的范围是(1,440)。 但是它仍然会产生超出界限和零的数字,而且它的频率也不是那么好。 它是C#.NET代码。 为什么这样? 你的答案可以是语言不可知/算法/分析。 提前致谢。

在给定值附近获得随机exception

我想在double类型的已知值数组中添加一种纹波。 我指出这一点,因为Random.Next / Random.NextDouble()表现不同。 我如何才能最好地完成这项任务? 假设我在数组中有20个值, List arr = new List() { 40, 40, 40, 40 ….. }; 20个值,在40的平均值,总共800,以使其更容易。 在这个方法之后,我希望整体总数仍然是800,但每个单独的值都应该修改。 值应该是正数,因为它们之后是total+=i 。 到目前为止,使用给定数量的值的百分比来解决该问题。 1.0 / 20 = 0.05, then multiplicate that with the total and the iteration number. Then subtract the result from the remainder. Finally i just return a sort by new Guid() 1.0 […]

如何连接两个平行的2d多边形以创建无缝的3D网格?

假设我有两个多边形,一个在另一个之上,就像这样: 我想连接它们的顶点,用它们周边的三角形创建一个三维网格。 此图显示了一种可能的方法(橙色线代表三角形边): 这种事情可以由人类直观地完成,但我在将其转化为工作算法时遇到了麻烦。 多边形存储为List 。 它们总是很简单,可能是凹的。

你能改进F#中的’代码行算法’吗?

我编写了一个小脚本来迭代文件夹中的文件以计算代码行数。 脚本的核心是这个函数来计算空格,注释和代码的行。 (请注意,目前它是针对C#量身定制的,并且不了解多行注释)。 它对我来说看起来不是很好 – 有没有人有更清洁的版本? // from list of strings return tuple with count of (whitespace, comments, code) let loc (arr:List) = let innerloc (whitesp, comment, code) (l:string) = let s = l.Trim([|’ ‘;’\t’|]) // remove leading whitespace match s with | “” -> (whitesp + 1, comment, code) //blank lines | “{” -> […]

合并Treenodes

有谁知道将以下列方式合并treenodes的算法? treeA \ child a \node(abc) \ child b \node(xyz) + treeB \ child a \node(qrs) \ child b \node(xyz) \node(pdq) \ child c \node(pdq) = // do merge treeMerged \ child a \node(abc) \node(qrs) \ child b \node(xyz) \node(pdq) \ child c \node(pdq) 任何帮助将不胜感激。

C#纸牌游戏中的最佳卡片选择

问题在于遵循以下规则在游戏的每个时刻选择最佳选项: 您只能选择最左边或最右边的卡。 您的对手将始终先选择,并始终从最左侧或最右侧的牌中选择最高牌。 如果它是一个平局,它会选择最右边的。 考虑到这并不总是最好的选择。 有时赢得胜利是不可能的,但无论如何你必须通过对抗这个对手来展示你可以添加的最高分(或者说策略,让我们说)。 例: Cards: 1 2 4 2 8 4 3 Opponent: 3 4 2 2 = 11 Me: 1 8 4 = 13 在这里,我在第二回合选择了1而不是4,所以我可以选择8。 这就是选择最高卡并不总是最好的原因。 我一直在尝试使用递归来实现这个解决方案,但我不确定它是最好的选择。 有关如何设计此算法的任何想法? [编辑]感谢@PengOne的慷慨帮助。 这是我试图实现的代码,但不幸的是它给了我错误。 我该怎么办呢? 随着我的进步,我正在编辑这个。 static int cardGameValue(List D, int myScore, int opponentScore) { if (D.Count == 0) return myScore; else { if (D[0] […]

有谁知道任何C#BDD(二元决策图)包?

我如何实现二元决策图(BDD)? 我想基于文化算法和BDD的电路故障检测来实现BDD的最小化。

计算字符串的所有可能组合,并加以扭曲

我试图允许用户在文本框中输入文本,并让程序生成所有可能的组合,除了最少3个字符,最多6个字符。我不需要像’as’这样无用的单词, ‘a’,’i’,’to’等混乱我的arrays。 我还将根据字典检查每个组合,以确保它是一个真正的单词。 我有完整的字典(精心制作, 这里是一个回复的链接 (警告:巨大的加载时间(对我而言)!) 无论如何,如果用户输入’ABCDEF’(没有特定的顺序),我怎么能生成,例如: ‘ABC’ ‘BAC’ ‘CAB’ … ‘ABD’ ‘ABE’ ‘ABF’ 等……无论什么顺序,每种可能的组合? 我知道这些组合有一些荒谬的组合,但它只需要计算一次,所以我不太担心。 我发现代码示例以递归方式找到固定宽度字符串(ABCDEF,ABCDFE … ACDBFE等)的组合(不是排列,我不需要那些)。 他们没有做我需要的事情,而且我对这个项目的起点也没有丝毫的线索。 这不是作业,它开始是我的个人项目,这个项目已经成长为一个简单的问题……我无法相信我无法理解这一点!

图中2个节点之间的所有路径

我必须进行一个不知情的搜索(广度优先搜索)程序,它接受两个节点并返回它们之间的所有路径。 public void BFS(Nod start, Nod end) { Queue queue = new Queue(); queue.Enqueue(start); while (queue.Count != 0) { Nod u = queue.Dequeue(); if (u == end) break; else { u.data = “Visited”; foreach (Edge edge in u.getChildren()) { if (edge.getEnd().data == “”) { edge.getEnd().data = “Visited”; if (edge.getEnd() != end) { edge.getEnd().setParent(u); } else […]

最快的安全排序算法实现

我花了一些时间在C#中实现快速排序算法。 完成后,我比较了我的实现速度和C#的Array.Sort-Method。 我只是比较了随机int数组的速度。 这是我的实现: static void QuickSort(int[] data, int left, int right) { int i = left – 1, j = right; while (true) { int d = data[left]; do i++; while (data[i] d); if (i < j) { int tmp = data[i]; data[i] = data[j]; data[j] = tmp; } else { if (left < […]