Tag: algorithm

如何计算整数范围内的每个数字?

想象一下,你出售那些用于房屋,储物柜门,酒店房间等的金属数字。当你的客户需要门牌号码时,你需要找出每个数字有多less个数字: 1到100 51至300 1到2,000,左边是零 显而易见的解决scheme是从第一个到最后一个数字执行一个循环,将计数器转换为左侧或没有零的string,提取每个数字,并将其用作索引来递增10个整数的数组。 我想知道是否有更好的方法来解决这个问题,而不必遍历整个整数范围。 任何语言或伪代码的解决scheme都是受欢迎的。 编辑: 答案审查 CashCommons和Wayne Conrad的 John评论说,我目前的做法很好,也足够快。 让我用一个愚蠢的比喻:如果你在1分钟内完成棋盘上方块的计算任务,你可以通过逐个计算方块来完成任务,但更好的解决scheme是计算边和做一个乘法,因为你以后可能会被要求去计算build筑物中的瓷砖。 亚历克斯·雷斯纳(Alex Reisner)指出了一个非常有趣的math定律,不幸的是,这个问题似乎并不相关。 Andresbuild议我使用相同的algorithm,但用%10操作而不是子string提取数字。 约翰在CashCommons和phordbuild议预先计算所需的数字并将它们存储在查找表中,或者对于原始速度来说,它是一个数组。 如果我们有一个绝对的,不可移动的,最大的整数值,这可能是一个很好的解决scheme。 我从来没有见过其中之一。 高性能标记和filter计算了各种范围所需的数字。 一毫秒的结果似乎表明有一个比例,但其他数字的结果显示不同的比例。 filter发现了一些公式,可以用来计数十位数的数字。 Robert Harvey在MathOverflow上发表了一个非常有趣的经历。 math家之一用math符号写了一个解决scheme。 Aaronaught使用math开发和testing了一个解决scheme。 发布后,他回顾了从math溢出发起的公式,并发现它的缺陷(指向Stackoverflow :)。 noahlavine开发了一个algorithm,并以伪代码的forms呈现。 一个新的解决scheme 读完所有的答案,并做了一些实验,我发现,从1到10 n -1的整数范围: 对于数字1至9,需要n * 10 (n-1)个片段 对于数字0,如果不使用前导零,则需要n * 10 n-1 – ((10 n -1)/ 9) 对于数字0,如果使用前导零,则需要n * 10 n-1 -n 第一个公式是filter (也许是其他人)发现的,我发现了另外两个是通过反复试验(但是可能包含在其他答案中)。 例如,如果n = […]

我怎样才能打印出给定的电话号码可以代表的所有可能的字母组合?

我刚刚尝试了我的第一次编程面试,其中一个问题是编写一个给定7位数字电话号码的程序,可以打印每个数字可能表示的所有可能的字母组合。 问题的第二部分是如果这是一个12位数字的国际号码呢? 这将如何影响你的devise。 我没有我在面试中写的代码,但是我觉得他并不满意。 做这个的最好方式是什么?

伪随机数发生器 – 指数分布

我想生成一些伪随机数,直到现在我已经非常满意.Net库的Random.Next(int min, int max)函数。 这个品种的PRNGs 应该是使用均匀分布 ,但是我非常想用一个指数分布生成一些数字。 我在C#编程,虽然我会接受伪代码或C ++,Java或类似的。 任何build议/代码片段/algorithm/想法?

将多个filter应用于pandas DataFrame或Series的高效方法

我有一个场景,用户想要应用几个filterpandasDataFrame或系列对象。 从本质上讲,我想要有效地链接一堆由用户在运行时指定的过滤(比较操作)。 filter应该是添加剂(也就是每个应用应该缩小结果)。 我目前正在使用reindex()但是这每次创build一个新的对象,并复制底层的数据(如果我正确理解文档)。 所以,在过滤大型的Series或者DataFrame时,这可能是非常低效的。 我在想,使用apply() , map()或类似的东西可能会更好。 对于pandas来说,我还是很新的,尽pipe如此还是试图把我的头围绕在一切之上。 TL; DR 我想采取以下forms的字典,并将每个操作应用到给定的Series对象,并返回一个“过滤的”Series对象。 relops = {'>=': [1], '<=': [1]} 长例子 我将从我目前所拥有的一个例子开始,只是过滤一个Series对象。 以下是我目前使用的function: def apply_relops(series, relops): """ Pass dictionary of relational operators to perform on given series object """ for op, vals in relops.iteritems(): op_func = ops[op] for val in vals: filtered = op_func(series, val) series = […]

certificate一个随机生成的数字是均匀分布的

我在接受采访时被问到了这个问题。 给定一个随机数发生器产生一个数字[0,N),如何certificate这个数是均匀分布的。 我不知道如何解决这个问题,有什么build议吗?

如何智能地降解或平滑GIS数据(简化多边形)?

我有详细的美国县地图,从TIGER LINE数据集。 我怎样才能对数据进行采样,平滑或降级,这样我就可以得到更直观,更方便,更“嘈杂”的形状来代表地理特征​​ – 在这种情况下,只是县界限和州界线,但也可能在一般情况下? 如果可以高效地完成抽样,则抽样可能发生,或者可以生成并存储并行数据集。 我使用的是PostGIS ,而这些行是由shp2pgsql生成的多重多段线,但是任何解决方法都是使用一条波浪线,并将其减less到与人类解释程序大致相同的平滑线,这将非常有用。

两个整数的XOR是否超出范围?

我一直在研究在数组中寻找孤独整数的algorithm,这里是实现: int arr[] = {10, 20, 30, 5, 20, 10, 30}; int LonelyInteger = 0; for(int i=0; i< 7; i++) { LonelyInteger = LonelyInteger ^ arr[i]; } 结果是5 。 我的问题是 – 据说由于这个操作,整数(由XOR操作产生) 太大了 : LonelyInteger ^ arr[i] 这导致一个潜在的大整数不能由数据types表示在这种情况下说int 。 我的问题是: XOR甚至有可能产生一个不能存储在inttypes中的大整数值? 如果这不可能发生,那么是否有证据呢?

滚动方差algorithm

我试图find一个有效的,数值稳定的algorithm来计算滚动方差(例如,在20周期滚动窗口上的方差)。 我知道Welfordalgorithm可以有效地计算一串数字的运行方差(它只需要一次通过),但我不确定这是否可以适应滚动窗口。 我也想要避免在本文顶部讨论的准确性问题的解决scheme。 任何语言的解决scheme都很好。

最快的方法来计算一个128位整数模64位整数

我有一个128位无符号整数A和一个64位无符号整数B.计算A % B的最快方法是什么?这是将A除以B得到的(64位)余数? 我正在寻找以C或汇编语言来做到这一点,但我需要针对32位的x86平台。 这不幸意味着我不能利用128位整数的编译器支持,也不能利用x64体系结构在单个指令中执行所需操作的能力。 编辑: 感谢您迄今的答复。 但是,在我看来,推荐的algorithm会非常慢 – 不是执行128位乘64位除法的最快方法是利用处理器对64位乘32位的本机支持吗? 有没有人知道是否有办法在几个较小的部门执行更大的部门? Re:B多久换一次? 主要是我对一个通用的解决scheme感兴趣 – 如果A和B每次都可能会有所不同,你会进行什么样的计算? 但是,第二种可能的情况是B不会像A那么频繁地变化 – 可能有多达200个A被B分开。在这种情况下你的答案会有什么不同?

什么是正确的方法来获得(-1)^ n?

许多algorithm需要计算(-1)^n (两个整数),通常作为一系列因子。 也就是说,对于奇数n是-1对于偶数n是1 。 在C或C ++环境中,经常会看到: #include<iostream> #include<cmath> int main(){ int n = 13; std::cout << std::pow(-1, n) << std::endl; } 什么更好或惯例? (或者是其他东西), std::pow(-1, n) std::pow(-1, n%2) (n%2?-1:1) (1-2*(n%2)) // (gives incorrect value for negative n) 编辑:另外,用户@SeverinPappadeux提出了另一种基于(全局?)数组查找的替代scheme。 我的版本是: const int res[] {-1, 1, -1}; // three elements are needed for negative modulo results const int* […]