相关疑难解决方法(0)

使用Random和OrderBy是一个很好的shuffle算法吗?

我在Coding Horror上读过一篇关于各种shuffle算法的文章.我已经看到人们已经在某个地方对列表进行了洗牌:

var r = new Random();
var shuffled = ordered.OrderBy(x => r.Next());
Run Code Online (Sandbox Code Playgroud)

这是一个很好的shuffle算法吗?它是如何工作的?这样做是否可以接受?

c# algorithm shuffle

160
推荐指数
5
解决办法
4万
查看次数

简单的Java地图拼图

这种通用库方法的最佳实现是什么?

public static <K, V> boolean containsEntry(
    Map<K, V> map, K key, V value) {}
Run Code Online (Sandbox Code Playgroud)

与大多数编码难题一样,判断此谜题的标准依次为:

  1. 完整性
  2. 正确性
  3. 性能
  4. 美女
  5. 收到PayPal捐款

编辑:

好吧,既然关闭了,我不妨发布答案.我认为这可能是最佳的:

  V valueForKey = map.get(key);
  return (valueForKey == null)
      ? value == null && map.containsKey(key)
      : valueForKey.equals(value);
Run Code Online (Sandbox Code Playgroud)

一个聪明的简单解决方案是:

  return map.entrySet().contains(
      new AbstractMap.SimpleImmutableEntry<K, V>(key, value));
Run Code Online (Sandbox Code Playgroud)

它确实分配了一个实例,但它为地图实现提供了更多机会来做一些最佳的事情.

java puzzle collections

25
推荐指数
1
解决办法
2510
查看次数

如何为战舰中的船只生成统计上可能的位置

我制造了原始战舰,现在我正在寻求将我的AI从随机猜测升级到统计上猜测位置.我无法在线查找算法,所以我的问题是这个应用程序已经存在哪种算法?我将如何实现一个?

船舶:5,4,3,3,2

场地:10X10

板:

OCEAN = "O"
FIRE = "X"
HIT = "*"
SIZE = 10
SEA = [] # Blank Board
for x in range(SIZE):
    SEA.append([OCEAN] * SIZE)
Run Code Online (Sandbox Code Playgroud)

如果你想看到其余的代码,我在这里发布:(https://github.com/Dbz/Battleship/blob/master/BattleShip.py); 我不想用很多不相关的代码来混淆这个问题.

python algorithm math statistics

18
推荐指数
1
解决办法
3072
查看次数

更好的C#扑克框架设计?

我正在用C#编写一个扑克框架,我不喜欢我现在的设计.我的目标是拥有一个游戏引擎,可以非常快速地以批处理模式相互播放多个AI代理,并且可以与多个人(可能通过Silverlight客户端)玩多个AI代理.我希望保持高效率但保持灵活性 - 例如,它应该能够玩有限德州扑克,无限注德州扑克,限制7张牌梭哈等游戏.

我目前的设计相当笨拙且不灵活:

  • HandHistory:包含有关当前手牌的所有信息(参与者,投注等)
  • IPlayer:每个玩家定义一个GetAction(HandHistory历史)方法.
  • GameEngine:定义一个返回HandHistory对象的Play(HandInfo信息)方法.
  • PotManager:管理底池并确定每个玩家必须打多少以及他们能赢多少(例如,如果他们有不相等的筹码并全押).
  • BetManager:管理投注并确定投注结束的时间.

HandInfo类包含有关如何设置手的所有信息.Play方法看起来像这样:

HandHistory Play(HandInfo info)
{
    PotManager pots = new PotManager(info);
    BetManager bets = new BetManager(info);
    HandHistory history = CreateHistory(info);

    bets.CollectBlinds();
    if(!bets.GameOver)
    {
        DealHoleCards();
        if(bets.PlayersThatCanStillBet > 1)
            bets.CollectBets();
        if(!bets.GameOver)
        {
            DealFlop();
            ... and on and on
        }
    }

    return history;
}
Run Code Online (Sandbox Code Playgroud)

问题的出现是因为有很多小事要考虑收集百叶窗等等.Bot和Bet经理课程变成了一场噩梦,并且总是充满了虫子.此外,我的引擎设计仅支持一种游戏类型(德州扑克)而不是其他类型.

我的主要排名是效率第一,因为引擎主要用作数十亿手的AI模拟器.但是,我想有一种更优雅的方式可以做到这一点.

c# oop poker

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

标签 统计

algorithm ×2

c# ×2

collections ×1

java ×1

math ×1

oop ×1

poker ×1

puzzle ×1

python ×1

shuffle ×1

statistics ×1