小编Pi *_*ort的帖子

在GHC Haskell中何时自动记忆?

我无法弄清楚为什么m1显然被记忆,而m2不在下面:

m1      = ((filter odd [1..]) !!)

m2 n    = ((filter odd [1..]) !! n)
Run Code Online (Sandbox Code Playgroud)

m1 10000000在第一次调用时大约需要1.5秒,而后续调用需要一小部分(大概是缓存列表),而m2 10000000总是花费相同的时间(每次调用重建列表).知道发生了什么事吗?关于GHC是否以及何时会记忆功能,是否有任何经验法则?谢谢.

haskell memoization ghc

106
推荐指数
3
解决办法
9781
查看次数

这个改组算法有什么问题,如果有的话,我怎么知道呢?

就像背景一样,我知道Fisher-Yates完美的洗牌.它的O(n)复杂性和保证的一致性是一个很好的混乱,我不会使用它...在一个允许就地更新数组的环境中(所以在大多数情况下,如果不是全部,命令式编程环境).

可悲的是,函数式编程世界并没有让你访问可变状态.

然而,由于Fisher-Yates,我没有很多关于如何设计改组算法的文献.完全解决这个问题的几个地方之前做了这么简单的说法,实际上,"所以这里是Fisher-Yates,这是你需要知道的所有洗牌".最后,我必须提出自己的解决方案.

我想出的解决方案是这样的,可以随机播放任何数据列表:

  • 如果列表为空,则返回空集.
  • 如果列表包含单个项目,则返回该单个项目.
  • 如果列表非空,则使用随机数生成器对列表进行分区,并将算法递归地应用于每个分区,然后汇总结果.

在Erlang代码中,它看起来像这样:

shuffle([])  -> [];
shuffle([L]) -> [L];
shuffle(L)   ->
  {Left, Right} = lists:partition(fun(_) -> 
                                    random:uniform() < 0.5 
                                  end, L),
  shuffle(Left) ++ shuffle(Right).
Run Code Online (Sandbox Code Playgroud)

(如果这看起来像是一种疯狂的快速排序,那么,基本上就是这就是它.)

所以这就是我的问题:同样的情况使得找到非Fisher-Yates 的改组算法变得困难,这使得找到分析混洗算法的工具同样困难.在分析PRNG的均匀性,周期性等方面,我可以找到很多文献,但没有关于如何分析洗牌的大量信息.(事实上​​,我在分析shuffle时发现的一些信息是完全错误的 - 很容易通过简单的技术欺骗.)

所以我的问题是:我如何分析我的改组算法(假设那里的random:uniform()调用可以生成具有良好特性的适当随机数)?我可以使用哪些数学工具来判断,在1 ... 100的整数列表中,是否有100,000次洗牌运行给了我合理的改组结果?我已经做了一些我自己的测试(例如,比较增量到shuffles中的减量),但我想知道更多.

如果对该混洗算法本身有任何了解,也会受到重视.

algorithm functional-programming shuffle

76
推荐指数
2
解决办法
1万
查看次数

ListView:setItemChecked仅适用于标准ArrayAdapter - 在使用自定义ArrayAdapter时不起作用?

这真的很奇怪.

当我使用标准ArrayAdapter进行ListView调用时,setItemChecked工作正常

但是当使用定制的ArrayAdapter时却没有.

那是什么原因?这是一个错误吗?或者我错过了什么?

public class Test_Activity extends Activity {

    /** Called when the activity is first created. */
    private List<Model> list;
    private ListView lView;

    public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    // Create an array of Strings, that will be put to our ListActivity
    setContentView(R.layout.main);
    lView = (ListView) findViewById(R.id.ListView01);
    lView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    list = getModel();

    //with this adapter setItemChecked works OK
    lView.setAdapter(new ArrayAdapter<Model>(this,
        android.R.layout.simple_list_item_multiple_choice, list));


  //**************************
    //PROBLEM: with this adapter it does not check any items on the screen
    // ArrayAdapter<Model> adapter …
Run Code Online (Sandbox Code Playgroud)

android listview android-arrayadapter

37
推荐指数
2
解决办法
4万
查看次数

如何从CursorLoader刷新光标?

所以我有我的MainDisplayActivity两个ActivityLoaderManager.LoaderCallbacks<Cursor>.在这里,我有一个A ListView,我填写了我使用ContentProvider从我的数据库获得的议程信息.我也有GridView一个日历.我点击一个单元格时设置了它,在点击的那一天更新议程.我的问题是,当重用我在onCreate()setOnItemClickListener()内部创建的Loader时,它不会使用我正在创建的新游标刷新信息.我可以用另一个ID创建一个新的Loader,它可以运行一次,但是一旦我点击另一天,它就会停止刷新.问题在于光标.如何从Loader刷新游标,这样我就不必继续创建新的Loader?提前致谢!

初始调用在My MainDisplayActivity类中的onCreate()中创建Loader :

makeProviderBundle(new String[] {"_id, event_name, start_date, start_time, end_date, end_time, location"},
            "date(?) >= start_date and date(?) <= end_date", new String[]{getChosenDate(), getChosenDate()}, null);
    getLoaderManager().initLoader(0, myBundle, MainDisplayActivity.this);

    list.setAdapter(agendaAdapter);
Run Code Online (Sandbox Code Playgroud)

这些是被重写的方法 LoaderCallbacks<Cursor>

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    Uri baseUri = SmartCalProvider.CONTENT_URI;
    return new CursorLoader(this, baseUri, args.getStringArray("projection"), 
            args.getString("selection"), args.getStringArray("selectionArgs"), args.getBoolean("sortOrder") ? args.getString("sortOrder") : null );
}



@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
    agendaAdapter.swapCursor(arg1);
}



@Override …
Run Code Online (Sandbox Code Playgroud)

debugging android android-contentprovider android-loadermanager android-cursorloader

26
推荐指数
1
解决办法
2万
查看次数

加速Django测试

我希望通过Django了解有关您的测试流程的更多信息.

背景资料 http://docs.djangoproject.com/en/dev/topics/testing/

我在使用测试驱动开发时遇到了困难.Django的测试运行器在启动时不断在测试数据库中创建所有数据库模型.对于我们当前的项目(40到240个型号),这意味着测试开始需要20秒.

这使得经常测试新功能完全不可行.我的问题,你们是如何解决这个问题的呢?

我在过去尝试了一些事情.) - 每次更改testloader以重用相同的测试数据库并在需要时应用迁移b.) - 从__main__python文件流中运行我的单元测试

选项b对于sys.path很尴尬,选项a是可行的,但似乎不是django方式.

更新:选项A确实不是一个糟糕的解决方案.它只是相当多的努力.这让我相信人们使用不同的解决方法.SQL lite可能就是那种解决方法.但我猜还有更多.

python django unit-testing

17
推荐指数
4
解决办法
5086
查看次数

将SQLite数据库加载到Android应用程序中

我能够在我的Android应用程序中创建,编写和读取SQLite数据库.我有一个完全填充数据的数据库副本,我想将这些数据存入App的数据库.是否可以从我的应用程序内部访问我的填充数据库?或者我可以至少创建一个填充数据库的副本,然后使用该副本?或者我是否需要执行.dump并将所有插入内容放入Android代码中?

sqlite android

15
推荐指数
0
解决办法
2万
查看次数

我怎么告诉django-nose我的测试在哪里?

我在测试目录中测试了Django应用程序:

my_project/apps/my_app/
??? __init__.py
??? tests
?   ??? __init__.py
?   ??? field_tests.py
?   ??? storage_tests.py
??? urls.py
??? utils.py
??? views.py
Run Code Online (Sandbox Code Playgroud)

Django测试运行器要求我将一个suite()函数放在__init__.py我的应用程序的tests目录的文件中.该函数返回当我执行$ python manage.py test时将运行的测试用例

我安装了django-nose.当我尝试使用django-nose运行测试时,运行0测试:

$ python manage.py test <app_name>
Run Code Online (Sandbox Code Playgroud)

如果我直接指向测试模块,则运行测试:

$ python manage.py test my_project.apps.my_app.tests.storage_tests
Run Code Online (Sandbox Code Playgroud)

为什么django-nose的测试跑者没有找到我的测试?我必须做什么?

python django unit-testing nose django-nose

15
推荐指数
2
解决办法
5742
查看次数

压缩/缩小动态html

我正在使用django模板,为了便于阅读,我的html看起来类似于以下内容:

{% if some_variable %}
    text
{% else %}
    nothing exists here
{% endif %}

{% for item in set %}
    {% if forloop.first %}
...etc...
Run Code Online (Sandbox Code Playgroud)

它在运行时转换为以下html,其中包括大量的空格和返回:

text

<div>

  <li

        class='some_class

    >

    some text

   </li>

</div>

etc...
Run Code Online (Sandbox Code Playgroud)

在查看页面源时,有些页面甚至可以运行~3,000行html.

有没有工具在运行时压缩这个HTML?如何删除额外的换行符?

html compression django gzip

11
推荐指数
1
解决办法
6205
查看次数

ExpandableListView在组展开/折叠时滑动动画

我有一个可扩展的列表视图,其中两个组分别为第1组和第2组.每个组都有一些项目.

>第1组

>第2组

当我点击第1组时,它会展开并显示子项目.我正在尝试的是点击组1它应该展开,幻灯片动画效果按下组2.类似于再次点击组1应该崩溃,组2应该向上移动滑动效果.我无法找到解决方案.请帮助我提出宝贵的建议.感谢致敬 :)

animation expand android expandablelistview collapse

10
推荐指数
0
解决办法
1909
查看次数

固定长度和类型文字的列表

我正在尝试为Haskell中的固定长度列表定义一个类型.当我使用标准方式将自然数编码为一元中的类型时,一切正常.但是,当我尝试在GHC的类型文字上构建所有内容时,我遇到了大量问题.

我对所需列表类型的第一次拍摄是

data List (n :: Nat) a where
  Nil :: List 0 a
  (:>) :: a -> List n a -> List (n+1) a
Run Code Online (Sandbox Code Playgroud)

遗憾的是,它不允许使用类型编写zip函数

zip :: List n a -> List n b -> List n (a,b)
Run Code Online (Sandbox Code Playgroud)

我可以通过从类型变量n中的类型变量中减去1来解决这个问题(:>):

data List (n :: Nat) a where
  Nil :: List 0 a
  (:>) :: a -> List (n-1) a -> List n a -- subtracted 1 from both n's
Run Code Online (Sandbox Code Playgroud)

接下来,我尝试定义一个追加函数:

append :: List n1 a -> …
Run Code Online (Sandbox Code Playgroud)

haskell type-inference ghc

9
推荐指数
2
解决办法
747
查看次数