小编IVl*_*lad的帖子

递归与循环

我正在尝试使用这里给出的树上的例子:http://cslibrary.stanford.edu/110/BinaryTrees.html 这些例子都通过递归来解决问题,我想知道我们是否可以为每一个提供迭代解决方案它们,意思是,我们总能确保通过递归解决的问题通常也会有迭代解决方案.如果没有,我们可以用什么样的例子来说明只能通过递归/迭代解决的问题?

-

iteration recursion concept

13
推荐指数
1
解决办法
1197
查看次数

河内配置在一定的举动

我感兴趣的是在河内拼图塔的特定移动中找到每个挂钩上有多少个磁盘.例如,给定n = 3磁盘我们有这个配置序列,以便最佳地解决难题:

   0 1 2
0. 3 0 0
1. 2 0 1 (move 0 -> 2)
2. 1 1 1 (move 0 -> 1)
3. 1 2 0 (move 2 -> 1)
4. 0 2 1 (move 0 -> 2)
5. 1 1 1 (move 1 -> 0)
6. 1 0 2 (move 1 -> 2)
7. 0 0 3 (move 0 -> 2)
Run Code Online (Sandbox Code Playgroud)

所以给出第5号移动,我想返回1 1 1,给出6号移动,我想要1 0 2 …

algorithm

7
推荐指数
1
解决办法
1762
查看次数

我应该在哪里存储我的游戏级别状态?

我有一个游戏,我在SurfaceView上绘制和移动位图.用户可以交互(拖放)这些位图.当玩家点击主页按钮然后返回游戏时,我希望能够暂停游戏,然后将其恢复到离开之前的状态.存储自定义对象的最佳方法是什么?

  1. 我应该实现onSaveInstanceState(Bundle)并拥有我想要保存的对象的所有类实现Parcelable接口吗?这将是相当多的工作,我仍然不确定如何保存像位图这样的东西.我想我不会,我只会从磁盘重新加载.

    我也对捆绑提供什么样的存储感到困惑:磁盘存储永远不会消失,除非你自己清除它,或者如果操作系统决定在后台运行时将内存程序从内存中删除,则内存存储会消失.根据这个问题的评论,它是磁盘存储.该文件意味着它是存储器,说Note that it is important to save persistent data in onPause(),但是我不觉得它很清楚.此页面还暗示它不是持久性的:只有应用程序保留在内存中才会持续存在.那么是哪一个呢?

  2. 上面的最后一个链接建议onRetainNonConfigurationInstance()在应用程序处于后台时使用将对象保留在内存中.这意味着如果在后台运行时程序被内存占用,一切都将丢失.这似乎是大多数(我所测试的)游戏中的内容:如果你在玩游戏时回到家中然后重新进入游戏,那么关卡会重新开始.如果你回家,打开很多东西(足以让Android从内存中删除游戏),然后回去,没有任何恢复,游戏从主菜单开始.这是否意味着这是他们使用的,如果是这样,这是一个好的做法吗?

请注意,关于Bundle持久性的问题仅仅是次要的好奇心.我真的不在乎这个游戏的状态是不是永久保存的,并且可能在游戏暂停一段时间后丢失(2如上所述).我对这个案例的最佳实践感兴趣.

java android

7
推荐指数
1
解决办法
408
查看次数

3SUM扭曲

我在接受采访时被问到这个问题,并不确定如何回答.这是一个常规的3SUM问题,我们都知道O(n ^ 2)的答案.问题就是这样:你有3个未排序的数组a,b,c.发现三个元件,使得A [1] + B [j]的+ C [k]的= 0你不允许使用在这种情况下散列并将该溶液必须<=为O(n ^ 2)

这是我的答案,不幸的是,这仍然是O(n ^ 3)

public static void get3Sum(int[] a, int[] b, int[] c) {
    int i = 0, j = 0, k = 0, lengthOfArrayA = a.length, lengthOfArrayB = b.length, lengthOfArrayC = c.length;

    for (i = 0; i < lengthOfArrayA; i++) {
        j = k = 0;
        while (j < lengthOfArrayB) {
            if (k >= lengthOfArrayC) {
                j++;
                continue;
            } else if (a[i] + b[j] + c[k] == 0) …
Run Code Online (Sandbox Code Playgroud)

algorithm

7
推荐指数
1
解决办法
473
查看次数

计算给定k个模和的子序列数

给定一个数组an整数,算多少序列(不连续也)有sum % k = 0:

1 <= k < 100
1 <= n <= 10^6
1 <= a[i] <= 1000
Run Code Online (Sandbox Code Playgroud)

一个O(n^2)解决方案是容易实现,但是更快的方法O(n log n)或者O(n)是必要的.

algorithm

7
推荐指数
1
解决办法
1355
查看次数

用户在部分视图中登录并显示错误

我想构建一个登录表单,该表单显示在我站点中每个页面的侧栏中.如果用户输入了错误的用户/通行证,我希望错误显示在此表单上方(页面的其余部分保持原样),如果他成功登录,我希望表单更改为列表有关用户的信息(同样,页面的其余部分与登录前相同).我正在使用带有默认Internet应用程序模板的MVC 3 Web应用程序项目.我有这个:

_Layout.cshtml

@{ 
    if (User.Identity.IsAuthenticated)
    {
        Html.RenderAction("ShowUserInfo", "User");
    }
    else
    {
        Html.RenderAction("LogIn", "User");   
    }        
}
Run Code Online (Sandbox Code Playgroud)

UserController的

    [ChildActionOnly]
    public PartialViewResult ShowUserInfo()
    {
        // populate loggedInInfo from database based on
        // User.Identity.Name
        return PartialView("_LoggedInInfo", loggedInInfo);
    }

    private ActionResult RedirectToPrevious(string returnUrl)
    {
        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
            && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
        {
            return Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("index", "");
        }
    }

    [ChildActionOnly]
    public PartialViewResult LogIn()
    {
        return PartialView("_LogInForm");
    }

    //
    // POST: /User/LogIn

    [HttpPost]
    public ActionResult LogIn(LogInModel …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-mvc-3

6
推荐指数
1
解决办法
2682
查看次数

生成随机隧道

我们可以使用哪些方法生成随机隧道,类似于这个经典直升机游戏中的那个?除此之外,它应该是光滑的,并允许您通过它导航,同时寻找尽可能(不太对称,但并不过分扭曲要么)自然,它也应该:

  1. 最重要的是 - 无限的让我能够及时控制它的厚度 - 当我认为合适的时候,让它变得更窄或更宽.
  2. 理想情况下,应该可以用平滑的曲线高效地生成它,而不是像上面游戏那样的矩形;
  3. 我应该能够事先知道它的界限是什么,所以我可以检测到碰撞并在隧道内产生通电;
  4. 任何其他属性,让您可以更好地控制它或提供优化的可能性是值得欢迎的.

注意: 我不是要求哪个最好或游戏使用什么,这可能引发扩展讨论并且是主观的,我只是要求其他人知道或使用过的某些方法,或者甚至认为它们可能有效.就是这样,我可以从那里拿走它.

还在gamedev上询问.我认为它适用于这两个地方,因为它是一个算法问题,因为它是一个gamedev问题,IMO.

random algorithm

6
推荐指数
1
解决办法
755
查看次数

使用二进制索引树进行RMQ扩展

RMQ问题可以扩展如下所示:

给定是一个n整数数组A.

query(x,y):给定两个整数1≤ x,yn,找到最小值A[x], A[x+1], ... A[y];

更新(X,V):给定的整数v和1≤ xnA[x] = v.

O(log n)对于使用分段树的两个操作,可以解决该问题.

这是纸上的有效解决方案,但在实践中,分段树涉及大量开销,尤其是在递归实现时.

我知道有一种方法可以解决O(log^2 n)使用二进制索引树的操作中的一个(或两个,我不确定)的问题(可以找到更多的资源,但是这个,是,IMO,分别是最简洁和详尽的).对于n适合内存的值,此解决方案在实践中更快,因为BIT具有更少的开销.

但是,我不知道如何使用BIT结构来执行给定的操作.我只知道如何使用它来查询区间总和.我怎样才能用它来找到最小值?

如果它有帮助,我有其他人编写的代码可以满足我的要求,但我无法理解它.这是一段这样的代码:

int que( int l, int r ) {
    int p, q, m = 0;

    for( p=r-(r&-r); l<=r; r=p, p-=p&-p ) {
        q = ( p+1 >= l ) ? …
Run Code Online (Sandbox Code Playgroud)

algorithm optimization data-structures

6
推荐指数
1
解决办法
2357
查看次数

计算2个相关方程的解的数量

我如何找到解决方案的数量

s = a+b
x = a^b
Run Code Online (Sandbox Code Playgroud)

sx中,将其^手段xor

因此,对于像(0,0)(31,31)(15,10)

我已经尝试过转换x成二进制字符串,但之后我不知道该去哪里.

java algorithm math xor

6
推荐指数
1
解决办法
167
查看次数

Python Keras 代码无明显原因内存不足

考虑以下与 CIFAR-10 数据集上的 Keras 顺序模型配合使用的代码。文章末尾给出了背景:

import tensorflow as tf
from sklearn.datasets import fetch_openml
from sklearn.utils import shuffle

data, targets = shuffle(*fetch_openml('CIFAR_10', version=1, return_X_y=True))
train_sz = 50000
X_train, X_test, y_train, y_test = data[:train_sz, :], data[train_sz:, :], np.asarray(targets[:train_sz], dtype=np.int), np.asarray(targets[train_sz:], dtype=np.int)

model = tf.keras.Sequential()
model.add(tf.keras.Input(shape=(X_train.shape[1],)))
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(10))
model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), optimizer='adam')

s = 0
for _ in range(500):
    for i in range(100):
        layers = []
        for layer in model.get_weights():
            layers.append(np.random.normal(0, 1, layer.shape))
        model.set_weights(layers)
        eval = model.evaluate(X_train, y_train)
        s += eval
        print(f'Done {i}')
print(s) …
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x keras tensorflow

6
推荐指数
1
解决办法
3161
查看次数