假设您在内存中有大量连续的整数,每个整数属于一个类别.两个操作必须是O(log n):将范围从一个类别移动到另一个类别,并查找给定范围的类别计数.
我很确定第二次操作是在第一次操作的正确实现的情况下解决的.
每个整数都从一个类别开始,所以我从一组平衡的BST开始.将子树从一个BST移动到另一个BST(例如,将范围移动到另一个类别)具有相当于合并两个BST的运行时间,即O(n1*n2)[ 1 ].
这太慢了(在python中,C不是一个选项),我无法找到一种方法来利用我的数据的固有结构来创建一个有效的BST合并操作.
我现在正在研究AVL,红黑和间隔树,二进制堆和treaps.比较他们的属性是压倒性的.我应该使用哪种结构?
编辑(问题澄清):我对如何存储这些值并创建数据结构很灵活.关于我如何接收来自其他应用程序的输入,我不灵活,如下所示:CATEGORY(cat3, I, J).我当前的解决方案创建了一个树,其中包含该范围中每个整数的节点.这对于我的数据集的大小来说太慢了,所以如果给出更好的方法,我很乐意重新设计.
任何给定的请求都可以将任何可能的整数范围移动到任何类别中.换句话说,范围在CATEGORY(cat1, 1, 10)后面的意义上是重叠的CATEGORY(cat3, 5, 15),但是在任何给定时间每个整数将恰好属于一个类别的意义上是非重叠的.
从您的模块utils.coffee开始:
exports.foo = ->
exports.bar = ->
Run Code Online (Sandbox Code Playgroud)
然后你的主文件:
utils = require './utils'
utils.foo()
Run Code Online (Sandbox Code Playgroud)
foo()和bar()是你经常调用的函数,所以你:
foo = require('./utils').foo
bar = require('./utils').bar
foo()
Run Code Online (Sandbox Code Playgroud)
当模块中仅定义了少量函数时,此方法有效,但随着函数数量的增加而变得混乱.有没有办法将所有模块的功能添加到您的应用程序的命名空间?
假设我有一个档案/Users/me/app/src/scripts/foo.js.我设置了一个gulp任务,将此文件写入/Users/me/app/dist/scripts/foo.js:
gulp.src('src/scripts/foo.js', base: 'src')
.pipe(...)
.pipe(gulp.dest('dist'))
Run Code Online (Sandbox Code Playgroud)
我正在写一个简单的插件,需要知道scripts/foo.js.我期待file.relative成为这个部分路径,但它提供了foo.js.我不明白的方式来获得scripts/foo.js来自任意组合file.path,file.cwd,file.base,等.
我怎样才能获得我需要的路径?
我有一个段树,它包含一系列数字的数据(这里选择的数据结构).这是代码:
class SegmentTree:
def __init__(self, N):
def _init(b, e):
if b is e:
data = foo() # No dependency
return Node(b, e, data, None, None)
else:
mid = (b + e ) / 2
L = _init(b, mid)
R = _init(mid + 1, e)
data = foo() #Data depends on L and R
return Node(b, e, data, L, R)
self.root = _init(1, N)
Run Code Online (Sandbox Code Playgroud)
对于大约300的N,超过最大递归深度超出错误时,这会失败.有没有办法迭代地而不是递归地创建树?
我有一个类似于Translate SQLite query, with subquery, into Peewee statement和Can peewee nest SELECT 查询以便外部查询选择内部查询的聚合的问题?.
我试图生成的结果是:给定一个fruit包含 行的表格(type, variety, price),找到每种水果中最便宜的品种。http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/中描述了几种解决方案:
select f.type, f.variety, f.price
from (
select type, min(price) as minprice
from fruits group by type
) as x inner join fruits as f on f.type = x.type and f.price = x.minprice;
Run Code Online (Sandbox Code Playgroud)
或者:
select type, variety, price
from fruits
where price = (select min(price) from fruits as f where f.type = fruits.type);
Run Code Online (Sandbox Code Playgroud)
我如何才能 Peewee-ify …
我正在尝试向表单添加内联表单集。这是重现错误的最少代码:
模型.py
class Festival(Model):
desc = TextField(max_length=1000)
class FestivalAddress(Model):
festival = ForeignKey(Festival, related_name="addresses")
name = CharField(max_length="50")
Run Code Online (Sandbox Code Playgroud)
网址.py
urlpatterns = patterns('',
url('^add/$', FestivalCreateView.as_view(), name='festival_add'),
)
Run Code Online (Sandbox Code Playgroud)
视图.py
class FestivalCreateView(CreateView):
model = Festival
form_class = FestivalForm
#Add FestivalAddressFormset to context here
Run Code Online (Sandbox Code Playgroud)
表格.py
class FestivalAddressForm(ModelForm):
class Meta:
model = FestivalAddress
class FestivalForm(ModelForm):
class Meta:
model = Festival
FestivalAddressFormSet = inlineformset_factory(FestivalForm, FestivalAddress, form=FestivalAddressForm, extra=2)
Run Code Online (Sandbox Code Playgroud)
这会抛出 AttributeError: 'ModelFormOptions' object has no attribute 'get_parent_list'。我有点困惑,因为我正在遵循SO 上给出的解决方案。
编辑:我删除了 FestivalCreateView 对表单集的使用,因为无论有没有它都会发生错误。
这是Elixir 1.3中最小的破坏示例:
defmodule Foo do
@type t :: %__MODULE__{x: non_neg_integer}
defstruct x: 0
@spec test(t) :: t
def test(%__MODULE__{} = foo), do: test2(foo)
@spec test2(t) :: t
defp test2(%__MODULE__{} = foo), do: %__MODULE__{foo | x: 5}
end
Run Code Online (Sandbox Code Playgroud)
这无法使用以下方式键入check : foo.ex:9: The variable _@1 can never match since previous clauses completely covered the type #{'__struct__':='Elixir.Foo', _=>_}.
我搜索和搜索过,不能为我的生活找到解释这意味着什么,或如何解决它.
我正在使用这里讨论的Javascript风格的字典.执行:
class DotDict(dict):
def __getattr__(self, attr):
return self.get(attr, None)
__setattr__= dict.__setitem__
__delattr__= dict.__delitem__
Run Code Online (Sandbox Code Playgroud)
我已经使用了这个结构一段时间没有问题,但最近需要一个带有连字符的字典,如下所示:
foo = DotDict()
foo.a = 'a' #Business as usual
foo.a-b = 'ab' #Broken
Run Code Online (Sandbox Code Playgroud)
分配给foo.ab会导致:
SyntaxError: can't assign to operator
Run Code Online (Sandbox Code Playgroud)
这会打破,因为' - '被视为减号操作而不是键名的一部分.是否有另一种方法来创建具有点式成员访问权限的字典?
python ×4
algorithm ×2
tree ×2
coffeescript ×1
dialyzer ×1
django ×1
django-forms ×1
elixir ×1
gulp ×1
javascript ×1
module ×1
node.js ×1
optimization ×1
peewee ×1
sql ×1
types ×1