保育士は「誰でもできる仕事」か?について

news.yahoo.co.jp

でこの記事に対して、下記のようなブクマコメントをしたのだけれど、1つではあるけれど、スターがついてしまったのでメモ代わりに書いておこうとおもう。

保育士は「誰でもできる仕事」か(駒崎弘樹) - 個人 - Yahoo!ニュース

ホリエモンは保育士が特に資格が必要な職業とは思えないからって発言だろうなと思う。準保育士とかつくって、要件緩和、違いを明確化すればよい案件かもしれない

2017/10/17 14:12

そもそも保育士が難しいというのは下記のエントリが分かりやすく、保育士試験の合格率は2割程度となっている。
www.lifeworkshare.com

で駒崎さんのブログ中にある。
法的に最低人員配置基準を決められている & 物理的に無理と書いてある部分を満たそうとすると無理という話なんだけど、
これ0歳児3人に1人つけなきゃいけない法的基準を、0歳児20人に保育士2人+バイト6人くらいにできないの?というのは自分としても思う。

さすがにまったくの未経験者は厳しいと思うので、先の保育士試験で筆記の科目合格の人たちを準保育士としてはどうかみたいなヨタ話として書いた。

もともとの本題のなぜ給与が上がらないかについては、駒崎さんの書いている通り、構造上の問題だとおもう。

ただ、ホリエモンの答えにキチンと反論するなら、保育士に必要な知識がたくさんあることは書かないといけないし、実際の業務すべてにその知識が必要なこと(すべて保育士がやらないといけないこと)を示さないといけない。

で、個人的にはそうだとはおもわない。法律上そうなっているのはわかるが、すべて保育士がやらないといけないということはさすがに示せないとおもう。実際には保育士未満の人で肩代わりできる仕事は結構あるだろう(という思い込みかもしれないけど)、もしそうなら法律かえればいいんじゃね。とおもう。

駒崎さんの最後の給与を上げる方法についていえば、「補助金を増やせば保育士給与は上がる」は正しいだろうけど、それは経済活動上望ましくはないなとおもう。
また足りていないのは首都圏のみという話もあるので、であればまさに特区で規制緩和でいいんじゃないだろうか?

選挙とか

興味はもつのだけれども、投票したい政党とかがないなぁ。

  • 二大政党制とか目指すのやめたほうがいいんじゃないの?とおもってきた。

STOP安倍政権のスローガンとかみていると、そもそも単独政党による過半数とかできるルールが悪いんじゃないかとおもってきた。いっそのこと、政党助成金の上限を決めたり、政党の議員上限数を決めたりで自民党なら派閥単位で分党とか、単独与党は存在しないようにしたほうがいいんじゃないだろうか?

  • 解散権はあっていいとおもうけど、政局によって総選挙のための費用を負担させられるのは微妙

そもそも任期を務め上げるというのは前提にないといけないと思う。なので時限立法について選挙後、新首相による廃案可能権を付与するとか、そういうハザードを課してはどうかとおもう。

憲法改正はあってもよいとおもうのだけど、それが議席数による数の暴力と称されるようなプロセスであれば、不満はあるし、でも必要であれば迅速には対応してほしいとはおもう。結局3分の2の賛成多数で成立のような常に1/2の選択を選挙にかこつけて押し付けられているのがむしろ暴力的と感じている気がする。
なので、憲法改正は時限立法としてまずは試してみて、一定期間後に憲法に反映されるというようなプロセスはあっていいとおもう。

で、個人的にはこういうアーキテクチャとかルールが一番興味があって、政治をリファクタリングするというような政党がほしいのだとおもった。
それは希望の党がいうような「リセットする」とか、しがらみを否定するものではなくて、不満(おそらく課題ではなく)は何で、それはこういうルールにすればうまくいくんじゃないだろうか?というのをコード化(法制化)することで妥当なプロセスに落ち着くように、アーキテクチャを作ってくれる人達、そういうことを考えてくれる政党がほしいなとおもう。

それは見る感じ、すこし立憲民主党ではなさそうでだから投票したい政党がないという風になるのだと思う。

K4の対辺を繋ぐグラフにしてみる

K_4の各辺を頂点にして、その完全マッチングの対に辺を引くという変換をおもいついて、やってみたら面白かった。

  • K_2 → 1頂点
  • K_3 → 3頂点、辺無し
  • K_4 → 6頂点、3本の辺
  • K_5 → petersenグラフ
  • K_6 → 正則グラフR^{6}_{15}
  • K_n → 正則グラフR^{\frac{(n-2)(n-3)}2}_{\frac{n(n-1)}2}, n \ge 2

Rの右肩が次数、右膝が頂点数。たぶんあってるとおもうんだけど。。。
n=1の場合もなんとなくイメージができて、頂点のない自己ループぽい(1正則、0頂点)のも趣きがある。
n=-1の場合は1頂点、6正則でK_4の変換後を回収しそうなのも面白い。実際3本の辺は同じクリークだし。

最大クリーク数もなんとなく関係性が見えて、変換後の辺(K_2)がK_4なのは明らかなので、およそ元のグラフの最大クリークの半分だろうとおもう(しっかり確認してないけど)。
普通のグラフでどんな性質あるんだろう?って感じ。

完全グラフでいえば、これはクネーザーグラフ K_{n:2}と一緒だな。

計画性

自分はすごく計画性がないなとおもっているんだけど、最近すこしづつ計画性がついてきたとおもっていて、それでも人から期待される程度の1割以下だとおもっているので、自分の成長を自分でほめて、且つ、人には申し訳ない感じなので、大変こころがつらい。

ヒューリスティックな彩色

k-degenerationグラフの順序で彩色してやれば、最大出次数+1以下で彩色できるのだけど、1点を除いて、最小最大出次数が2以上減る場合は彩色数が減るなと思った。

あと平面グラフで彩色数がk(≧4)のときに、頂点を追加して、色がkの頂点とその隣接点全部に接続したグラフを作って、それを彩色してやるとkになって間違っていることがわかるとかないかなとかおもった。

最大出次数を最小にする順序/Rubyのpriority queue

kousuke.hatenablog.com

以前、この記事で最大出次数を最小にする順序は難しいかもと書いたけどできるらしい。

Degeneracy (graph theory) - Wikipedia

アルゴリズムも載っていたのだけれど、優先度を変更できる優先度付キューをつかうと簡単にできそうだった。


Rubyの優先度付キューを探してみると標準では優先度付キューはないようだ。lazy priority quueuというgemがあって、この中でベンチマークがある。

github.com

優先度変更がなくてよいならPriorityQueueCxx、 変更有りならsupertinou/PriorityQueue、どちらもC++ extensionなので、Pure Rubyならlazy_priority_queueがよいよとのこと。

サンプルやコードを見ていると、なるほど優先度を高くする方向(min heapでは、値としては下がる方向)はサポートできるみたいな感じっぽい。

ヒープのデータ構造に違いがあり、lazy_priority_queueは2項ヒープとのこと、フィボナッチヒープと比べると、フィボナッチヒープの方が平均的には早いけど、ワースト時間で遅いものがあるみたいな感じっぽい。さきのC++拡張の2つともフィボナッチヒープ。

二項ヒープ - Wikipedia

フィボナッチヒープ - Wikipedia

多分2007年度の卒業論文(学部生)じゃないかと思うんだけど、グラフの彩色アルゴリズムの内容も基本的にはk-degenerationグラフの順序を求めているのと一緒だった。強いてあげるならば、なるべく次数降順に並ぶように順序を決めていた。

自分としてはここに安定結婚問題をもってきたいとおもっていて、適当につくったのが、結構いい値がでてて、精度保障できないかなとか思ってるけど、全然証明とかできない。

貪欲法と違うのは基本的に1色で塗れるだけ塗るというのをやってる。安定結婚問題に合わせて色を男性、頂点を女性とすると、貪欲法だと女性優先で、下記のコードだと男性優先なんじゃないかとおもっているが実際には貪欲法と変わらない。なんというか、うまいこと頂点毎の順序や色ごとの順序つくれないかなとおもっている。なんで安定結婚問題でやりたいかといえば、マッチングの質に関しての研究が進んでいるからというのが理由。意外と順序決めるのが早かったりしないかなとおもっている。

#!/usr/bin/env ruby
require 'lazy_priority_queue'
require 'optparse'

def degeneracy_order(graph, vset)
  q = MinPriorityQueue.new
  k = 0
  order = []
  used = {}
  d = {}
  vset.each do |v|
    dv = graph[v].size
    d[v] = dv
    q.push v, dv
  end
  until q.empty?
    v = q.dequeue
    used[v] = true
    k = d[v] if d[v] > k
    order << v
    graph[v].each do |u|
      d[u] -= 1
      unless used[u]
        q.change_priority u, d[u]
      end
    end
  end
  order.reverse
end

def build_graph(vset, eset)
  graph = {}
  vset.each do |v|
    graph[v] = []
  end
  eset.each do |u,v|
    graph[v] << u
    graph[u] << v
  end
  graph
end

def gs_coloring(graph, vset_order)
  match = {}
  c = -1
  until vset_order.empty?
    c += 1
    vset_order.reject! do |v|
      if graph[v].none?{|u| match[u] == c }
        match[v] = c
      end
      match[v]
    end
  end
  [c + 1, match]
end

opt_result = false

opt = OptionParser.new
opt.on('-r','print result.'){ opt_result = true }
opt.parse!(ARGV)

n,m = gets.split.map(&:to_i)

V = n.times.to_a
E = m.times.map{ gets.split.map(&:to_i) }

G = build_graph(V,E)
vset_order = degeneracy_order(G, V)
number, result = gs_coloring(G, vset_order)

puts number
puts V.map {|v| "#{v} #{result[v]}" } if opt_result

最大クリーク問題(改)

最大クリーク問題をいま全面的に書き直していて、すごくおもしろいアルゴリズムになった。

補グラフを彩色して、各色の頂点数を数えて最大のものが最大クリークの下限になる。この下限を使用して元グラフで頂点、辺を落としていく。

補グラフをk彩色できたら、 O(k^2)かけてで色クラスを2つ選んで最大マッチングで最小頂点被覆を求めて、最大独立集合を求めて少しずつ大きくしていく。
もしk=2になったら確定する。

k≧3から落ちなければ、微妙。ただ、ある程度の大きさまで来たら、補グラフの連結性を判定して細切れの補グラフ連結成分の元グラフのクリークサイズで足し合わせることができるので、そこがカーネルになるなら、それはそれであり。


補グラフを彩色するのは最適彩色じゃなくてよいので、Welsh-Powellの貪欲彩色とか、外部性のある安定結婚問題とかで解ける。
むしろ最適だとn/kに近くなっちゃうので、頂点数最大になるような方法の方がよい。まあ、その方法はNP完全なんだけどね。