Skip to main content

Command Palette

Search for a command to run...

Algo式: 833 (Swift)

Published
1 min read

Task 833

  • ままこ立ての問題
    • 初めて聞いた
  • remove(at:)を使った実装
    • 自力で実装する際は素直にArrayを使った
    • remove(at:)の計算量がO(n)
    • 全体の計算量はO(n^2)
  • 今回の制約だと計算量がO(n^2)でも、問題なし
    • 解説でも似た感じの実装でO(n^2)
  • 配列の最後に追加する実装
    • 解説での実装からヒントを得た
    • 配列の中での位置さえ管理できれば配列から数字を取り除く必要がない
    • O(n)で計算できているはず
    • 競プロっぽい実装になった
    • メモリは使う
  • ArraySlice
    • ArraySliceについて調べてみた
    • ArrayではstartIndexは常にゼロ
    • ArraySliceではstartIndexがゼロとは限らない
    • ArraySlicepopFirst()ならO(1)
      • ほかの要素は移動せず、startIndexが1増えるだけ
      • メモリ上で移動していないのなら、メモリは使い続けそう
    • ArraySliceでもremove(at:)removeFirst()reverse()などはO(n)
    • append(_:)は大体O(1)
      • ほかのインスタンスとメモリ上で共有していなければO(1)
      • 共有していたら、それぞれメモリを利用する必要が出てコピーにO(n)
      • メモリ上で隣接できなくなるともっと広いところにO(n)で移動する必要がでる
      • ArrayよりもArraySliceの方が移動する必要が多そう
    • 先頭に要素をO(1)で追加する必要がなければ、キューとして使えそう
  • countの計算量
    • isEmptyはO(1)、countはO(n)だと思い込んでいた
    • ArraySliceで実装の際、startindexendIndexの差でO(1)で計算できた
    • ArrayArraySliceでのcountのドキュメントでは計算量の記載がない
    • Yong Cui氏の記事を見つける
    • ArrayArraySliceRandomAccessCollectionプロトコルに準拠
    • RandomAccessCollectionプロトコルに準拠していればcountの計算量はO(1)
    • SetはRandomAccessCollectionプロトコルに準拠していないただのCollectionで本来はO(n)だけど、Setでのcountの計算量はO(1)
    • Stringでのcountは上記記事によるとO(n)
      • ただ、記事中の表を見るとStringのパフォーマンス、変わっていないような?
      • Stringも配列と言えば配列だけど…
      • とはいえ、Stringは複雑で全体的に自信がない

提出

Algo式

Part 1 of 50

毎日Algo式の記録

More from this blog

swift-collectionsのSortedCollectionsを試す方法

swift-collectionsを読み込む際にmainブランチを指定する 2024年4月14日現在のswift-collectionsのリリースバージョン1.1.0では、SortedCollectionsが含まれていません(取り除かれました…)。そのため、SortedCollectionsを利用するにはリリースブランチではなく、mainブランチを利用する必要があります。 package.swiftで指定する場合は、下記のようにdependenciesでブランチを指定します。 // swift-...

Apr 14, 20241 min read

Swift 5.9からの `swift package init` の変更点

先日、 swift package init コマンドを使った際にswift 5.9に合わせた変更点に気づきました。 情報があまりなく、私自身が戸惑ったこともあり、コマンドを実行する時の--typeを基準にどういった変更があったのか概要をまとめたいと思います。 Init template cleanup #6144 Swift Fromsでの議論によると、狙いとしてはシンプルなユースケースへの最適化にあるようです。 system-module、manifestと、empty これまであった、 s...

Dec 25, 20231 min read

アルゴ式: 961 Q4. 二部グラフ判定 (DFS ver.) (Swift)

Q4. 二部グラフ判定 (DFS ver.) なんとか毎日問題は解いていたけれども、ブログは空いてしまった Bool?に対してSwitch文を書こうとしたけれども、Optionalの場合は、.some()を挟むというので方針を変更 提出したコードはその名残が残ってしまった 提出はしていないけれども簡単な修正もした このブログを書いている際に、改めてSwitch分で書いたりもした(1, 2) 提出 AC

Jun 18, 20221 min read

Continuous Tumbling

123 posts

Learning Swift/Swift UI, and competitive programming. (he/him)