微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为最小堆编写添加函数?

如何解决如何为最小堆编写添加函数?

我正在尝试用 Java 为最小堆编写一个 add 函数,但我似乎无法编写一个正常工作的函数。我已经为 add 方法尝试了两种解决方案,但似乎都不起作用。我尝试使用 int 来存储先前的位置,然后将其重新插入堆中,但这不会产生任何结果。任何帮助将不胜感激。

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<ul class="sort top">
  <li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 1
    <ul class="sort child">
      <li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 1.1</li>
    </ul>
  </li>
  <li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 2
    <ul class="sort child"></ul>
  </li>
  <li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 3
    <ul class="sort child"></ul>
  </li>
  <li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 4
    <ul class="sort child"></ul>
  </li>
  <li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 5
    <ul class="sort child"></ul>
  </li>
  <li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 6
    <ul class="sort child"></ul>
  </li>
  <li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 7
    <ul class="sort child"></ul>
  </li>
</ul>

自从我将这个发布到 add 函数以来,我已经取得了一些进展。我现在可以打印其中的一些值,但这些值没有正确打印或添加正确。这是我目前所在的位置:

$(function() {
  function makeChildLists(target,class){
    $("li",target).each(function(i,el){
      $("<ul>",{
        class: "child " + class
      }).appendTo(el)
    });
  }

  makeChildLists($(".top"),"sort");
  
  $(".sort").sortable({
    connectWith: ".sort",handle: "span.ui-icon",placeholder: "ui-state-highlight"
  });
  $("#sortable").disableSelection();
});

解决方法

一些问题:

  • 第一个版本中的 for 条件是错误的:当您减少 i 时,该条件应该违反最小限制,例如 {{1 }}。在第二个版本中,它是一个递增循环,它解决了这个问题,只是插入算法确实需要一个递减循环——表示从树的底部走到根部。

  • 在第一个版本中,当列表为空时,您不会增加 i >= 0。这在第二个版本中解决了。但是,在第二个版本中,您不会在索引 0 处填充条目。

  • 在第一个版本中,子节点和父节点之间的关系不是根据索引来计算的。这在第二个版本中有更好的介绍——使用除以 2——但它仍然不完全正确。

这是如何做到的。请注意,无需区别对待空列表。此外,无需在每次迭代中交换。只需将值向下移动,为值 back 留下一个间隙,但仅在确定了 right 目标索引后才分配值 x。这样可以节省一些不必要的任务。

x

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。